개발공부/Spring
[spring] @Autowired 위치와 required 옵션
환타몬
2022. 1. 25. 15:48
어노테이션 Autowired의 위치를 다르게 쓸 수 있다.
1. setter 위에 놓는 경우
2. 필드 위에 놓는 경우
3. overloaded 생성자 위에 놓는 경우
1,3번의 경우 당연한 것이다. Constructor 인젝션, setter 인젝션 크게 두 가지로 나뉘기 때문이다.
2번의 경우 필드 위에 @Autowired를 적으면 기본 생성자를 호출하는 과정에서 injection이 된다.
그렇기 때문에 만약 본인이 기본 생성자를 호출하는 과정에서 injection이 되길 원한다면 필드 위에 어노테이션을 설정해주면 된다.
또 overloaded 생성자에다가 꽂을 수 있는데, 여기서는 생성자 위에 적으면 에러가 난다.
그렇기 때문에
@Autowired
public ExamInlineConsole(@Qualifier("exam2") Exam exam) {
this.exam = exam;
System.out.println("overloaded constructor");
}
이렇게 Qualifier 어노테이션을 파라미터에다가 넣어준다.
또 @Autowired의 문제점은 자동으로 찾아서 넣어주기 때문에 만약 찾을 수 없다면 에러가 발생한다.
이런 null 값이 있을 경우도 생각해야 하는데, 이럴 땐 @Autowired(required=false)를 넣어주면 null이 와도 아무 문제 없이 출력된다. (단, exam이 null이라는 if문이 있어야 정상작동)