Spring/스프링 핵심 원리 - 기본편

[의존 관계 자동 주입] 자동 주입 대상 옵션으로 처리하기

alsruds 2023. 12. 19. 18:13
🧐강의🧐
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard

 

🚨 문제 상황 🚨

· 주입할 스프링 빈이 없어도 애플리케이션이 동작해야 하는 상황

· @Autowired 사용 시, 'required' 옵션 기본 값이 'true'로 되어 있어, 자동 주입 대상 없을 시 오류 발생

 

💡 해결 방법 💡

1️⃣ 호출 방지 : @Autowired(required = false)

2️⃣ null 호출 : @Nullable

3️⃣ Optional.empty 호출 : Optional< >

 

· test/java/hello.core/autowired/AutowiredTest

public class AutowiredTest {

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

    static class TestBean {

        // 1. 호출 안됨
        @Autowired(required = false) // required 기본값은 true
        public void setNoBean1(Member noBean1) {
            System.out.println("noBean1 = " + noBean1);
        }

        // 2. null 호출
        @Autowired
        public void setNoBean2(@Nullable Member noBean2) {
            System.out.println("noBean2 = " + noBean2);
        }

        // 3. Optional.empty 호출
        @Autowired
        public void setNoBean3(Optional<Member> noBean3) {
            System.out.println("noBean3 = " + noBean3);
        }
    }
}

 

· 테스트 결과

 

참고
- @Nullable & Optional 은 스프링 전반에 걸쳐 지원됨
     → 생성자 자동 주입에서 특정 필드에만 사용 가능