본문 바로가기

SPRING

DI 의존성 주입 - @Qualifier / @Resource

* @Autowired 어노테이션을 활용한 의존성 주입의 한계

- 지난 강의에서는 @Autowired은 자료형이 일치하는 객체는 자동으로 주입 되었음

- 하지만, 둘 이상의 객체가 의존성 주입의 타겟이 된다면 @Autowired만으로는 객체 주입을 할 수 없음 -> 오류 발생

  (의문: 무대 위에서 가수라는 인터페이스에서 뻗어나온 발라드 가수도, 힙합 가수도, 댄스 가수도

   번갈아 가면서 노래를 해야하는 경우에는 어떻게 해야할까?)

- 둘 이상의 객체가 주입의 타겟이 되는 경우는 특정 객체를 지목해서 주입해야함. 이 때, 사용하는 어노테이션이 @Qualifier

- cf) @Inject = @Autowired : @Inject는 자바에서 쓰이는 의존성 주입 어노테이션

 

* @Qualifier 어노테이션

- @Autowired 바로 아래에 사용

- @Qualifier("객체명") : 객체명은 보통 소문자 작성(멤버변수명) , 똑같지만 정확한 정보는 빈 컨테이너에 적힌 변수명으로!!

- 디폴트 생성자가 꼭 필요

- 한계 : 동시에 무대 위에서 발라드 가수도, 힙합 가수도, 댄스 가수도 노래를 할 수는 없음. 번갈아가면서는 가능하지만. -> xml 파일 이용

 

1. xml 파일에 <context:component-scan> 태그로 객체 등록 -> 객체들은 대기 상태
2. Singer 인터페이스
3. sing() 기능을 하는 Singer 인터페이스를 구현 + 객체를 만들기 위해 @Component 어노테이션 사용 -> 실제 객체 생성
4. sing() 기능을 하는 Singer 인터페이스를 구현 + 객체를 만들기 위해 @Component 어노테이션 사용 -> 실제 객체 생성
5. Singer에 의존하는 Stage 클래스 생성 -> @Component 사용하여 진짜 객체 생성, @Autowired 사용하여 의존 주입, @Qualified 사용하여 객체 지정
6. 객체를 만들기 위해 @Component 어노테이션 + stage와 의존 관계이므로 의존성 주입을 위해 @Autowired 어노테이션 추가
7. console : 방송 송출용 무대에서 힙합가수가 랩을 합니다.

* @Resource 어노테이션

- @Autowired + @Qualifier 역할을 동시에 하는 어노테이션

- 주입과 동시에 객체를 지정해주는 역할

- @Resource(name="객체명") : @Autowired와 함께 쓰이지 않고 단독으로 사용

 

*연습문제

생성자를 생략한다는 말은 이런 뜻이다. (기존에 생성자를 넣은 이유는 자바 코드에 필요했기 때문, 이해를 돕기 위해?)
console : 장난감을 가지고 놉니다. 힘쎄고 오래가는 건전지