Spring - @Autowired, @Resource, @Inject, @Qualifier

우야·2021년 7월 17일
0

Dependency Injection 사용을 위한 Annotation

  1. @Autowired
  • Spring에서 지원하는 Annotation
  • 찾는 순서 : 타입 -> 이름 -> @Qualifier -> 실패
  • 사용 : 멤버변수, setter메소드, 생성자, 일반 메소드에 적용가능
  1. @Resource
  • Java에서 지원하는 Annotation
  • 찾는 순서 :이름 -> 타입 -> @Qualifier -> 실패
  • 사용 : 멤버변수, setter 메소드
  1. @Inject
  • Java에서 지원하는 Annotation
  • 찾는 순서 : 타입 -> @Qualifier -> 이름 -> 실패
  • 사용 : 멤버변수, setter 메소드, 생성자, 일반 메소드에 적용 가능
  1. @Qualifier
  • 컨텍스트에 동일한 Bean이 있을때, 찾는 방법으로 사용

    • 예) 두개의 같은 Type의 Bean을 등록했을때, 찾는 방법

      <context:annotation-config>
      <-- Member member = new Member() -->
      <bean id="member1" class="example.Member">
          <qualifier value="m1"/>
      </bean>
      <bean id="member2" class="example.Member">
          <qualifier value="m1"/>
      </bean>
      			<context:annotation-config/>
      
      //위와 같이 bean이 xml에 등록되어 있을때...
      
      // 이것은 Bean을 가지고 오지 못함 - 실패
      // Type 검사에서 두개 발견으로 실패
      // 이름 검사에서 bean id에서 member 없음으로 실패
      // @Qualifier 없음으로 실패
      // 실패
      public class Team {
      @Autowired    
      private Member member;	
      ...    
      }
      
      // 이것은 Bean을 가지고 올수 있음
      // Type 검사에서 두개 발견으로 싶패
      // 이름 검사에서 bean id에서 member 없음
      // @Qualifier에서 찾음 성공
      public class Team {
      @Autowired
      @Qualifier("member1")
      private Member member;	
      ...    
      }
    • Bean을 못찾은 경우 null이 들어가게 사용방법

      @Autowired(required = false)
    		@Qualifier("member")
    		@Override
    		public void setMember(Member member) {
    			this.member = member;
    		}
profile
Fullstack developer

0개의 댓글