DI에 관해 학습하면서 @Autowired(required=false) 라는 속성을 보게 됐다. 이것은 주입할 스프링 빈이 없어도 동작해야 하는 경우에 설정하는 것이다. 이 속성은 없는 경우에만 동작하게 한다기 보단, 의존성 주입을 옵션으로 설정하는 경우에 사용하는 것이다.
만약
@Autowired만 작성하는 경우에는 주입할 스프링 빈이 없는 경우에 에러가 발생한다. 이러한 에러를 막는 방법에는 3가지가 있다.
기본적으로 required 는 true로 설정되어 있다. 즉, bean이 있어야 하는 것이다. 그런데 이것을 false로 설정하면 오류가 발생하지 않는다.
만약 자동 주입할 대상이 없는 경우 메소드 자체가 호출되지 않기 때문에 오류가 발생하지 않는 것이다.
@Autowired(required = false)
public void setBookDAO(BookDAO bookDAO){
this.bookDAO = bookDAO;
}
만약 주입할 빈이 없으면 null이 주입된다.
@Autowired
public void setBookDAO(@Nullable BookDAO bookDAO{
this.bookDAO = bookDAO;
}
주입할 빈이 없으면 Optional.empty()로 들어오고, 있다면 Optional.of(bean)으로 주입되는 것이다. (Spring 4.3이상부터 지원)
@Autowired
public void setBookDAO(Optional<BookDAO> bookDAO){
this.bookDAO = bookDAO.orElse(null);
}