@Autowired에서 주입가능한 스프링 빈이 없어도 동작해야 할 때가 있다.
cf. required 옵션 디폴트가 true라서 주입대상이 없으면 오류가 발생한다.
↓
자동 주입 대상을 설정해야 한다.
자동 주입 대상을 옵션으로 처리하는 방법을 알아보자
↓
예제)
스프링빈으로 관리되는 객체가 아닌 Member객체를 @Autowired 메서드의 매개변수로 넣은 상태다.
즉 @Autowired에서 주입가능한 스프링빈이 없는 상태이다.
static class TestBean {
//1.
//호출 안됨 - 의존관계가 없을 경우 아예 호출안됨
@Autowired(required = false)
public void setNoBean1(Member member) {
System.out.println("setNoBean1 = " + member);
}
//2.
//null 호출
@Autowired
public void setNoBean2(@Nullable Member member) {
System.out.println("setNoBean2 = " + member);
}
//3.
//Optional.empty 호출
@Autowired(required = false)
public void setNoBean3(Optional<Member> member) {
System.out.println("setNoBean3 = " + member);
}
}
∨ Test 실행 & 결과
더보기
![](https://blog.kakaocdn.net/dn/rFFvO/btrG1tAr0qZ/GZJ1gpKnrFy4u6fEliNVik/img.png)
![](https://blog.kakaocdn.net/dn/dgZIef/btrGTZUslQc/B3gb0SHzfqS4Z6EYJ5bDJk/img.png)
@Test
void AutowiredOption(){
ApplicationContext ac = new AnnotationConfigApplicationContext(TestBean.class);
}
![](https://blog.kakaocdn.net/dn/rFFvO/btrG1tAr0qZ/GZJ1gpKnrFy4u6fEliNVik/img.png)
참고 ↓
![](https://blog.kakaocdn.net/dn/dgZIef/btrGTZUslQc/B3gb0SHzfqS4Z6EYJ5bDJk/img.png)
cf. @Nullable, Optional은 생성자주입에서 일부필드에만 선택적으로 사용해도 된다.
자유롭게.. 그냥 쓰는고임
반응형
'web +a' 카테고리의 다른 글
생성자 코드 최적화 - lombok 라이브러리 (0) | 2022.07.13 |
---|---|
생성자 주입 권장 (0) | 2022.07.13 |
컴포넌트 스캔 (0) | 2022.07.08 |
싱글톤 컨테이너 (0) | 2022.07.08 |
스프링 빈 조회 (getBean) - 상속관계인 경우 (0) | 2022.07.06 |