4. 의존 자동 주입 #3-2 @Qualifier 애노테이션 적용을 통한 특정 빈 설정 메소드 수행 확인

2021. 7. 12. 13:03JAVA/Spring

본 글은 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 도서의 내용을 복습하기 위해 작성된 글입니다.

2개의 의존 객체에 @Qualifier 애노테이션을 통한 같은 한정자 값을 적용하는 경우

개요

기본적으로 스프링 컨테이너가 생성한 빈 객체는 싱글톤 객체이다. 본 글의 목적은 같은 타입의 빈이 2개 이상 있는 상황에서 @Qualifier 애노테이션을 적용하여 하나의 빈 메소드만을 대상으로 자동 의존 주입 과정을 수행하는 것을 목표로 한다. 위와 같이 수행이 되면 @Qualifier 애노테이션을 설정한 같은 타입의 의존 객체들은 싱글톤 객체를 가질 것이라고 예상한다.

 

소스코드

MemberInfoPrinter.java

https://github.com/yonghwankim-dev/spring5/blob/master/sp5-chap04/src/main/java/chap04_03/spring/after/MemberInfoPrinter.java

 

yonghwankim-dev/spring5

최범균 저, 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 예제. Contribute to yonghwankim-dev/spring5 development by creating an account on GitHub.

github.com

MemberListPrinter.java

https://github.com/yonghwankim-dev/spring5/blob/master/sp5-chap04/src/main/java/chap04_03/spring/after/MemberListPrinter.java

 

yonghwankim-dev/spring5

최범균 저, 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 예제. Contribute to yonghwankim-dev/spring5 development by creating an account on GitHub.

github.com

AppCtx.java

https://github.com/yonghwankim-dev/spring5/blob/master/sp5-chap04/src/main/java/chap04_03/config/after/AppCtx.java

 

yonghwankim-dev/spring5

최범균 저, 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 예제. Contribute to yonghwankim-dev/spring5 development by creating an account on GitHub.

github.com

MainForSpring.java

https://github.com/yonghwankim-dev/spring5/blob/master/sp5-chap04/src/main/java/chap04_03/main/after/MainForSpring.java

 

yonghwankim-dev/spring5

최범균 저, 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 예제. Contribute to yonghwankim-dev/spring5 development by creating an account on GitHub.

github.com

실행결과

결과분석

MemberInfoPrinter 클래스의 MemberPrinter 타입의 의존 객체 주소값은 7ff2a664, MemberListPrinter 클래스의 MemberPrinter 타입의 의존 객체 주소값도 7ff2a664 이므로 둘은 싱글톤 객체임을 알 수 있다. 이와 같이 두 객체가 같은 이유는 두 의존 객체의 한정자 값을 @Qualifier 애노테이션을 통한 "printer"로 지정하였기 때문이다. 따라서 스프링 설정 클래스(AppCtx)에서 같은 타입의 빈 설정 메서드(memberPrinter1, memberPrinter2)가 있음에도 불구하고 memberPrinter1 빈 설정 메서드에 @Qualifier 애노테이션을 통하여 "printer"로 지정하였기 때문에 두 의존 객체는 memberPrinter1 메서드를 대상으로 의존 객체를 생성하였다. 따라서 같은 빈 설정 메서드를 대상으로 수행하였기 때문에 객체 주소값이 같은 것을 볼 수 있었다.

 

1개의 의존 객체에만 @Qualifier 애노테이션을 적용한 경우

개요

위의 예시에서는 2개의 의존객체에 @Qualifier 애노테이션을 통한 한정자 값을 같게 설정하여 싱글톤 객체인지를 확인하였다. 이번에는 1개의 의존객체에만 @Qualifier 애노테이션을 적용하여 같은 타입의 두 의존객체가 같은 객체 주소값을 갖는지를 목적으로 한다.

 

수행방법

MemberListPrinter2 클래스의 MemberPrinter 타입의 의존객체(printer)에만 @Qualifier 애노테이션을 적용하여 한정자 값은 "mprinter"로 설정한다. 그리고 나머지인 MemberInfoPrinter2 클래스의 MemberPrinter 타입의 의존객체(printer)에는 @Autowired 애노테이션만을 적용한다. 이때 @Qualifier 애노테이션을 적용하지 않은 의존 객체의 한정자 값은 "printer"가 된다. 마지막으로 스프링 설정 클래스(AppCtx2)에 같은 타입의 빈 설정 메소드가 2개 있는 상황에서 한 빈 설정 메서드(printer2)에 @Qualifier 애노테이션을 적용하여 한정자값을 "mprinter"로 설정한다.

 

소스코드

MemberInfoPrinter2.java

https://github.com/yonghwankim-dev/spring5/blob/master/sp5-chap04/src/main/java/chap04_03/spring/after/MemberInfoPrinter2.java

 

yonghwankim-dev/spring5

최범균 저, 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 예제. Contribute to yonghwankim-dev/spring5 development by creating an account on GitHub.

github.com

MemberListPrinter2.java

https://github.com/yonghwankim-dev/spring5/blob/master/sp5-chap04/src/main/java/chap04_03/spring/after/MemberListPrinter2.java

 

yonghwankim-dev/spring5

최범균 저, 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 예제. Contribute to yonghwankim-dev/spring5 development by creating an account on GitHub.

github.com

AppCtx2.java

https://github.com/yonghwankim-dev/spring5/blob/master/sp5-chap04/src/main/java/chap04_03/config/after/AppCtx2.java

 

yonghwankim-dev/spring5

최범균 저, 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 예제. Contribute to yonghwankim-dev/spring5 development by creating an account on GitHub.

github.com

MainForSpring2.java

https://github.com/yonghwankim-dev/spring5/blob/master/sp5-chap04/src/main/java/chap04_03/main/after/MainForSpring2.java

 

yonghwankim-dev/spring5

최범균 저, 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 예제. Contribute to yonghwankim-dev/spring5 development by creating an account on GitHub.

github.com

실행결과

결과분석

위의 결과를 통해서 MemberInfoPrinter2 클래스의 MemberPrinter 타입 의존 객체와 MemberListPrinter2 클래스의 MemberPrinter 타입 의존 객체의 주소값이 서로 다른 것을 확인 할 수 있다. 이는 스프링 컨테이너가 두 의존 객체의 자동 의존 주입 과정에서 서로 다른 빈 설정 메소드를 통해서 주입한 것을 알 수 있다.

 

정리하며

  • @Qualifier 애노테이션은 같은 타입의 빈 설정 메서드가 2개 이상 존재할 때 자동 의존 주입을 수행할 빈 설정 메서드를 한정할 수 있다.
  • 만약 @Qualifier 애노테이션을 지정하지 않으면 해당 의존 객체의 한정자 값은 파라미터 이름이나 필드 멤버명으로 설정된다.

References

초보 웹 개발자를 위한 스프링5 프로그래밍 입문, 최범균 저
https://github.com/yonghwankim-dev/spring5