백엔드/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());
}