울음참고 개발공부
article thumbnail
728x90

 

 

 

@Autowired 를 사용하는 경우

  • 기본적으로 필수적인 의존성을 가진다. ( 기본값 : required=true ) 
  • 해당 클래스를 주입할 수 있는 빈(Bean) 이 존재 하지 않으면 애플리케이션 컨텍스트 초기화 과정 중에 예외가 발생한다. 

 

 

@Autowired(required = false) 

  • 해당 의존성을 주입할 수 있는 빈이 없어도 예외를 발생시키지도 않고 무시됨
  • 해당 필드 또는 메서드 인젝션 포인트는 null 값으로 남음
  • 특정 상황에서 의존성이 없이도 애플리케이션이 잘 동작하도록 도와줌 

 

 

 


 

 

@Autowired (requird = false) 를 사용하는 것과
@Autowired 어노테이션 자체를 사용하지 않는 것의 차이?

 

 

 

 

 

[ 상황 ]

 

Member 클래스는 스프링 빈으로 등록되어있지 않다. 

그런 경우 @Autowired 로 의존성을 주입하려 할 때 빈을 찾지 못해 예외가 발생할 수 있다. 

 

아래에서는 스프링 빈으로 등록되지 않은 메서드에 의존성 주입을 시도하는 경우의 예시를 보여준다. 

 

 

public class autowiredTest {

    @Test
    void AutoWiredOption(){
        ApplicationContext ac = new AnnotationConfigApplicationContext(TestBean.class);
    }
    static class TestBean{
        @Autowired(required = false)
        public void setNoBean1(Member member) { System.out.println("TestBean.setNoBean1 = " + member); }
        @Autowired
        public void setNoBean2(@Nullable Member member) {
                    System.out.println("TestBean.setNoBean2 = " + member);
        }
        @Autowired(required = false)
        public void setNoBean3(Optional<Member> member) {
                    System.out.println("TestBean.setNoBean3 = " + member);
        }
    }
}

 

 

 

[ 이해가 안된 부분 ]

 

다음 테스트 코드를 출력하면 setNoBean1 은 출력되지 않고 다음과 같이 출력된다. 

 

 

 

@Autowired(required=false) 의 역할과 강의를 제대로 이해하지 못해서 다음과 같은 궁금증이 생겼다

 

" 어자피 출력못하는데 왜 쓰는거지 ..............? " 

 

다시 강의를 듣고 찾다 보니 다음과 같이 정리가 되었다. 

 

 

[ 요약 정리 ]

 

@Autowired(required=false)

 

주입할 스프링 빈이 없어도 동작해야할 때가 있다.

하지만 스프링 빈이 있는지 없는지 모르는 상태에서 @Autowired  로만 의존성을 주입하려하는 경우 오류가 발생한다.

 

required=false 옵션을 줌으로써 주입할 스프링 빈이 없는 경우 오류를 방지하고 있는 경우에는 주입해주는 역할을 하는 것이다. 

 

 

추가적으로 주입할 대상이 없을 경우 @Nullable 이나 Optional<> 을 사용할 수 있다. 

 

 

( 내가 궁금했던 부분 - '값이 출력안되는데 굳이 왜 쓰냐?' 가 아니라 있는지 없는지 모르니까 방지용으로 사용한거고, 없어서 출력안됬던 것 !! ㅎ  😓) 

 

 

 

@Autowired(required=false) : 자동주입할 빈이 있는경우 주입하고, 없는 경우에는 호출하지 않는다.

아예 사용하지않는 것 : 그냥 아무것도 실행되지않는다. 

 

 

 

 


 

해당 포스트는 아래 강의를 수강하며 개념을 익히기 위해 정리한 글이다. 

 

[ 참고 자료 ] 아래 강의 중  - "옵션 처리" 를 수강하며 

 

스프링 핵심 원리 - 기본편 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., 스프링 핵심 원리를 이해하고, 성장하는 백엔드 개발자가 되어보세요! 📢

www.inflearn.com

 

728x90
profile

울음참고 개발공부

@메각이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!