백엔드/Spring

Spring - @Autowired(required) | TIL_156

ran4 2022. 10. 24. 23:34

https://www.youtube.com/playlist?list=PLq8wAnVUcTFUHYMzoV2RoFoY2HDTKru3T

스프링 강의를 듣고 정리한 내용입니다

 


 

@Autowired의 위치와 Required 옵션

@Autowired는 필드 위에도 쓸 수 있다

@Autowired
private Exam exam;

 

 

 

기본 생성자를 호출하여 Injection

InlineExamConsole 클래스

@Autowired
@Qualifier("exam2")
public Exam exam;

public InlineExamConsole() {
System.out.println(“constructor”);
}

public InlineExamConsole(Exam exam) {
System.out.println(“overloaded constructor”);
this.exam = exam;
}

 

▷ setter에 @Autowired한 것과의 차이점

setter는 set 함수가 호출되면서 Injection 된다

 

 

기본 생성자를 지우는 경우 Injection 되지 않아 오류가 발생한다

-> 생성자가 존재하지 않는 경우에만 오류가 나지 않는다

 

 

 

생성자에 @Autowired 하는 경우

-> 파라미터에 Qualifier를 지정한다

@Autowired
public InlineExamConsole(
@Qualifier("exam1") Exam exam1,
@Qualifier("exam2") Exam exam2) {
System.out.println("overloaded constructor");
this.exam = exam;
}

 

 

 

 

@Autowired 사용시 객체 설정이 필수적이다

-> @Autowired(required = false)를 사용하면 기본 생성자를 통해서 실행된다

@Autowired(required = false)
@Qualifier("exam2")
private Exam exam;

@Override
public void print() {
if(exam == null)
System.out.printf("total is %d, avg is %f\n", 0, 0);

else
System.out.printf("total is %d, avg is %f\n", exam.total(), exam.avg());
}