web +a
자동주입 - 옵션 처리
냥냥체뤼
2022. 7. 11. 17:25
@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 실행 & 결과
더보기


@Test
void AutowiredOption(){
ApplicationContext ac = new AnnotationConfigApplicationContext(TestBean.class);
}

참고 ↓

cf. @Nullable, Optional은 생성자주입에서 일부필드에만 선택적으로 사용해도 된다.
자유롭게.. 그냥 쓰는고임
반응형