스프링을 사용할 때 클래스간의 결합도를 줄이고 DI 컨테이너가 자동으로 실행중에 동적으로 의존 객체를 할당 하도록 하기위해 의존 객체 자동 주입(Automatic Dependency Injection) 어노테이션을 사용하는데 일반적으로 1) @Autowired, 2) @Resource, 3) @Inject 세가지를 사용한다.
사용해보면 딱히 별 차이를 느낄수가 없고 동일하게 사용되는 것처럼 느껴지는데, 그도 그럴 것이 이 3개의 어노테이션 모두 이름, 타입 그리고 @Qualifier 어노테이션을 사용하긴 하지만 의존 객체를 찾는 방식과 순서에 차이가 있다.
여기서 @Qualifier 어노테이션은 일종의 한정자이다. 주입 대상이 한 개여야 하는데 실제로는 두 개 이상의 빈이 존재해 주입할 때 사용할 객체를 선택할 수 없기 때문에 스프링이 Exception을 일으킨다. 이런 상황을 대비해 @Qualifier 어노테이션을 통해 어떤 빈을 선택할 지를 정해주기 위해 사용한다.
이름 => 타입 => @Qualifier
Java에서 지원하는 어노테이션으로 특정 프레임 워크에 종속적이지 않다.
어노테이션과 함께 속성으로 작성한 name 속성을 우선적으로 탐색한다.
멤버변수 , setter 메소드에 적용 가능하다.
타입 => @Qualifier => 이름
마찬가지로 Java에서 지원하는 어노테이션으로 특정 프레임 워크에 종속적이지 않다.
타입을 우선적으로 탐색하며 name 속성을 마지막으로 탐색한다.
javax(현 jakarta) 라이브러리를 필요로 한다.
멤버변수, setter 메소드, 생성자, 일반 메소드에 적용 가능하다.
타입 => 이름 => @Qualifier
Spring에서 지원하는 어노테이션이다.
멤버변수, setter 메소드, 생성자, 일반 메소드에 적용 가능하다.