2021. 7. 12. 13:03ㆍJAVA/Spring
본 글은 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 도서의 내용을 복습하기 위해 작성된 글입니다.
2개의 의존 객체에 @Qualifier 애노테이션을 통한 같은 한정자 값을 적용하는 경우
개요
기본적으로 스프링 컨테이너가 생성한 빈 객체는 싱글톤 객체이다. 본 글의 목적은 같은 타입의 빈이 2개 이상 있는 상황에서 @Qualifier 애노테이션을 적용하여 하나의 빈 메소드만을 대상으로 자동 의존 주입 과정을 수행하는 것을 목표로 한다. 위와 같이 수행이 되면 @Qualifier 애노테이션을 설정한 같은 타입의 의존 객체들은 싱글톤 객체를 가질 것이라고 예상한다.
소스코드
MemberInfoPrinter.java
yonghwankim-dev/spring5
최범균 저, 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 예제. Contribute to yonghwankim-dev/spring5 development by creating an account on GitHub.
github.com
MemberListPrinter.java
yonghwankim-dev/spring5
최범균 저, 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 예제. Contribute to yonghwankim-dev/spring5 development by creating an account on GitHub.
github.com
AppCtx.java
yonghwankim-dev/spring5
최범균 저, 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 예제. Contribute to yonghwankim-dev/spring5 development by creating an account on GitHub.
github.com
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
yonghwankim-dev/spring5
최범균 저, 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 예제. Contribute to yonghwankim-dev/spring5 development by creating an account on GitHub.
github.com
MemberListPrinter2.java
yonghwankim-dev/spring5
최범균 저, 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 예제. Contribute to yonghwankim-dev/spring5 development by creating an account on GitHub.
github.com
AppCtx2.java
yonghwankim-dev/spring5
최범균 저, 초보 웹 개발자를 위한 스프링5 프로그래밍 입문 예제. Contribute to yonghwankim-dev/spring5 development by creating an account on GitHub.
github.com
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
'JAVA > Spring' 카테고리의 다른 글
4. 의존 자동 주입 #5 @Autowired 애노테이션의 필수 여부 (0) | 2021.07.12 |
---|---|
4. 의존 자동 주입 #4 상위/하위 타입 관계와 자동 주입 (0) | 2021.07.12 |
4. 의존 자동 주입 #3-1 @Qualifier 애노테이션을 이용한 의존 객체 선택 (0) | 2021.07.09 |
4. 의존 자동 주입 #2 @Autowired 애노테이션을 이용한 의존 자동 주입 (0) | 2021.07.09 |
4. 의존 자동 주입 #1 예제 프로젝트 준비 (0) | 2021.07.09 |