[Spring] @Autowired 주입할 bean이 없을 경우엔?!

지니·2025년 4월 17일

Spring

목록 보기
6/13
post-thumbnail

DI에 관해 학습하면서 @Autowired(required=false) 라는 속성을 보게 됐다. 이것은 주입할 스프링 빈이 없어도 동작해야 하는 경우에 설정하는 것이다. 이 속성은 없는 경우에만 동작하게 한다기 보단, 의존성 주입을 옵션으로 설정하는 경우에 사용하는 것이다.

만약 @Autowired만 작성하는 경우에는 주입할 스프링 빈이 없는 경우에 에러가 발생한다. 이러한 에러를 막는 방법에는 3가지가 있다.

1. required=false로 설정

기본적으로 required 는 true로 설정되어 있다. 즉, bean이 있어야 하는 것이다. 그런데 이것을 false로 설정하면 오류가 발생하지 않는다.

만약 자동 주입할 대상이 없는 경우 메소드 자체가 호출되지 않기 때문에 오류가 발생하지 않는 것이다.

@Autowired(required = false)
public void setBookDAO(BookDAO bookDAO){
	this.bookDAO = bookDAO;
}

2. @Nullable

만약 주입할 빈이 없으면 null이 주입된다.

@Autowired
public void setBookDAO(@Nullable BookDAO bookDAO{
	this.bookDAO = bookDAO;
}

3. Optional 사용

주입할 빈이 없으면 Optional.empty()로 들어오고, 있다면 Optional.of(bean)으로 주입되는 것이다. (Spring 4.3이상부터 지원)

@Autowired
public void setBookDAO(Optional<BookDAO> bookDAO){
    this.bookDAO = bookDAO.orElse(null);
}

0개의 댓글