Spring Boot
@Autowired required 옵션
작은별._.
2023. 12. 2. 19:56
728x90
주입할 스프링 빈이 없어도 애플리케이션이 동작해야 할 때가 있습니다. @Autowired는 required 옵션의 기본값이 true로 되어 있어서 자동 주입 대상이 없으면 오류가 발생합니다. 이번 포스팅은 자동 주입 대상을 옵션으로 처리하는 방법을 통해 오류가 발생하지 않도록 하는 방법에 대해서 작성하였습니다.
자동 주입 대상을 옵션으로 처리하는 방법은 아래와 같습니다.
- @Autowired(required=false): 자동 주입할 대상이 없으면 @Autowired가 선언된 메서드 자체가 호출되지 않습니다.
- org.springframwork.lang.@Nullable: 자동 주입할 대상이 없으면 null이 입력됩니다.
- Optional <>: 자동 주입할 대상이 없으면 Optional.empty가 입력됩니다.
예시 코드를 통해 각각의 경우를 확인해 보겠습니다.
public class AutowiredTest {
class NoBean {} // @Component가 아닌 일반 클래스
@Configuration
@ComponentScan
static class AppConfig {
@Autowired(required = false) // required=false 옵션
public void setNoBean1(NoBean noBean) {
System.out.println("setNoBean1: " + noBean);
}
@Autowired // @Nullable 옵션
public void setNoBean2(@Nullable NoBean noBean) {
System.out.println("setNoBean2: " + noBean);
}
@Autowired // Optional<> 옵션
public void setNoBean3(Optional<NoBean> noBean) {
System.out.println("setNoBean3: " + noBean);
}
}
@Test
@DisplayName("@Autowired 옵션 처리")
void AutoWiredTest(){
ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
}
}
[결과]
setNoBean2: null
setNoBean3: Optional.empty
NoBean 클래스는 스프링 빈이 아닙니다. 그리고 setNoBean1()은 @Autowired(required=false)여서 호출 자체가 되지 않은 결과를 확인할 수 있습니다.
이렇게 다양한 옵션을 통해 자동 주입 대상이 존재하지 않을 때도 애플리케이션이 잘 돌아가도록 설정할 수 있습니다.
[참고자료]
김영한, "스프링 핵심 원리 - 기본편", 인프런
728x90
반응형