#spring. @Autowired의 위치와 required 옵션

gisung2215·2020년 10월 22일
0

👍 Spring 개념정리

목록 보기
4/7
post-thumbnail

@Autowired의 위치에 따른 Injection 차이

package com.ssafy.test;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
public class GridExamConsole implements ExamConsole {

	// 방법 1. 이 위치에서는
    	// 기본생성자가 호출되는 과정에서 Injection이 진행된다. 
	@Autowired
	@Qualifier("exam1")
	private Exam exam;
	
	public GridExamConsole() {}
    
    	public GridExamConsole(Exam exam) {
        	this.exam = exam
        }

	@Override
	public void print() {
		System.out.println(" ___________________");
		System.out.println("|   total  |  avg   | ");
		System.out.println(" ___________________");
		System.out.printf("|    %3d  |   %3.2f|\n", exam.total(), exam.avg());
		System.out.println(" ___________________");
	}

	// 방법 2. 이 위치에서는
    	// setter가 호출되는 과정에서 Injection이 진행된다. 
	@Autowired
	@Qualifier("exam1")
	@Override
	public void setExam(Exam exam) {
		this.exam = exam;
	}
}

Overloadding 생성자에 @Autowired가 붙은 경우

package com.ssafy.test;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
public class GridExamConsole implements ExamConsole {

	private Exam exam;
	
	public GridExamConsole() {}
    
    // Overloadding 생성자는 examl이 2개 이상 들어갈 수 있다. 
    // 이때,아래와 같이 해결가능하다.
    	@Autowired
	@Qualifier("exam1")
    	public GridExamConsole(
            @Qualifier("exam1") Exam exam1
        ) {
        	this.exam = exam
        }

	@Override
	public void print() {
		System.out.println(" ___________________");
		System.out.println("|   total  |  avg   | ");
		System.out.println(" ___________________");
		System.out.printf("|    %3d  |   %3.2f|\n", exam.total(), exam.avg());
		System.out.println(" ___________________");
	}

	@Override
	public void setExam(Exam exam) {
		this.exam = exam;
	}
}

Q. @Autowired 선언되어 있으나, 객체가 없는 경우 에러가 발생한다. 이럴때 null을 처리해 줄 수는 없을까?

A. 이때 사용할수 있는 @Autowired(required = false) 옵션을 통해 기본값 설정이 가능하다.


@Component
public class GridExamConsole implements ExamConsole {


	@Autowired(required = false)
	@Qualifier("exam1")
	private Exam exam;
	
	public GridExamConsole() {}
    
    	public GridExamConsole(Exam exam1) {
        	this.exam = exam
        }

	@Override
	public void print() {
		if(exam == null) 
        	system.out.println();
        else 
        	system.out.println();
	}

	@Override
	public void setExam(Exam exam) {
		this.exam = exam;
	}
}

0개의 댓글

관련 채용 정보