해당 내용은 '스프링 입문을 위한 자바 객체 지향의 원리와 이해'와 인프런 김영한님의 '스프링 핵심 원리 - 기본편' 강의를 참고하였습니다.
@Autowired
를 생략해도 알아서 주입된다. 물론 스프링 빈에만 해당.@Autowired
를 붙여버리면 된다.@Configuration
같은 곳에서만 특별한 용도로 사용은 가능.때로는 자동으로 주입해야하는 스프링 빈이 없어도 작동해야하는 경우도 있다.
그런데 @Autowired
만 사용하면 자동으로 required 옵션이 true로 되어있어서 자동 주입 대상이 없으면 에러가 발생한다.
이럴때 사용하는 옵션이 3가지 있다.
Optional.empty
가 입력된다.아래의 옵션들로 한번 테스트 해보자.
AutowiredTest.java
public class AutoWiredTest {
@Test
void AutowiredOption() {
ApplicationContext ac = new AnnotationConfigApplicationContext(TestBean.class);
}
static class TestBean {
@Autowired(required = false)
public void setNoBean1(FuelTank fuelTank){
System.out.println("fuelTank1 = " + fuelTank);
}
@Autowired
public void setNoBean2(@Nullable FuelTank fuelTank){
System.out.println("fuelTank2 = " + fuelTank);
}
@Autowired
public void setNoBean3(Optional<FuelTank> fuelTank){
System.out.println("fuelTank3 = " + fuelTank);
}
}
}
빌드되면서 출력되는 내용은 다음과 같다.
fuelTank2 = null
fuelTank3 = Optional.empty
위에서 말한 것 처럼 required=false
이면 아예 호출이 되지 않는다.
참고로, @Nullable
, Optional
은 스프링 전반에 걸쳐서 지원된다.
그러니까 생성자 자동 주입에서 특정 필드 같은 곳에만 사용해도 된다.