어노테이션 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문이 있어야 정상작동)
'개발공부 > Spring' 카테고리의 다른 글
[spring] 특화된 @Component 어노테이션 (@Controller / @Service / @Repository) (0) | 2022.01.25 |
---|---|
[spring] 어노테이션을 이용한 객체 생성 (0) | 2022.01.25 |
[spring] @Autowired의 동작방식 이해와 @Qualifier 사용하기 (0) | 2022.01.25 |
[spring] 어노테이션을 이용할 때의 장점과 @Autowired를 이용한 DI (0) | 2022.01.24 |
[Spring Framework] 콜렉션 생성과 DI (0) | 2022.01.21 |