[SPRING] @Qualifier와 @Resource의 차이점
SPRING@Qualifier와 @Resource의 차이점
@Qualifier는 @Autowired와 항상 함께 사용됩니다.
@Autowired
@Qualifier("alpha")
VS
@Resource(name="alpha")
누구나 그 차이를 알려 줄 수 있니? 감사!
해결법
-
==============================
1.@Autowired는 단독으로 사용할 수 있습니다. 단독으로 사용하는 경우 유형별로 배선됩니다. @Autowired가 어떤 빈을 주입 할 지 알지 못하기 때문에 같은 유형의 하나 이상의 빈이 컨테이너에 선언되면 문제가 발생합니다. 결과적으로 @Qutifier와 함께 @Autowired를 사용하여 bean 이름 (이름으로 유선)을 지정하여 실제로 연결될 bean을 명확히하고,
@Autowired는 단독으로 사용할 수 있습니다. 단독으로 사용하는 경우 유형별로 배선됩니다. @Autowired가 어떤 빈을 주입 할 지 알지 못하기 때문에 같은 유형의 하나 이상의 빈이 컨테이너에 선언되면 문제가 발생합니다. 결과적으로 @Qutifier와 함께 @Autowired를 사용하여 bean 이름 (이름으로 유선)을 지정하여 실제로 연결될 bean을 명확히하고,
@Resource는 이름으로도 연결됩니다. 따라서 @Autowired가 @Qualifier와 함께 사용되면 @Resource와 동일합니다.
차이점은 @Autowired와 @Qualifier는 스프링 주석이고 @Resource는 JSR-250의 표준 자바 주석입니다. 게다가 @Resource는 필드와 설정자 주입 만 지원하며 @Autowired는 필드, 설정자, 생성자 및 다중 인수 메소드 주입을 지원합니다.
@Resource를 필드와 세터 주입에 사용하는 것이 좋습니다. 생성자 또는 다중 인수 메소드 삽입을 위해 @Qualifier 및 @Autowired를 사용하십시오.
이것 좀 봐:
-
==============================
2.@Autowired와 관련된 몇 가지 문제에 직면하여 @Qualifier를 사용하기 시작했으며, 같은 유형의 여러 빈이 정의 될 때 마침내 @Qualifier를 @Autowired와 함께 사용할시기를 알 수있었습니다.
@Autowired와 관련된 몇 가지 문제에 직면하여 @Qualifier를 사용하기 시작했으며, 같은 유형의 여러 빈이 정의 될 때 마침내 @Qualifier를 @Autowired와 함께 사용할시기를 알 수있었습니다.
동일한 유형이지만 다른 값을 갖는 2 개의 빈을 정의한다고 가정 해보십시오.
<bean id="appContext1" class="com.context.AppContext"> <constructor-arg value="abc" /> <bean/> <bean id="appContext2" class="com.context.AppContext"> <constructor-arg value="ABC" /> <bean/>
그런 다음 @Autowire를 사용하려는 경우 bean 이름과 동일한 변수 이름을 사용해야합니다. 그렇지 않으면 여러 유형을 발견 할 때 오류가 발생합니다.
@Autowired AppContext appContext;
위의 유스 케이스의 경우 한정어를 사용해야합니다.
@Autowired @Qualifier("appContext1") AppContext appContext;
대신 bean name과 같은 변수 이름을 사용하면 @Qualifier를 사용하지 않아도된다.
@Autowired AppContext appContext1;
나는 항상 bean 이름과 같은 변수 이름을 사용했지만 우연히 다른 변수 이름을 가지고이 문제에 직면했다.
의심이 있다면 알려주세요.
-
==============================
3.@Autowired는 올드 스쿨 봄입니다. @Resource는 Java EE CDI 표준입니다. Spring은 (매우 비슷한 @Inject와 마찬가지로) 두 가지 상황 모두에서 똑같은 작업을 수행합니다. @Resource를 권하고 싶습니다. @Autowired는 표준 이전에 만들어졌으며 대부분 이전 버전과의 호환성을 위해 지원되는 것 같습니다.
@Autowired는 올드 스쿨 봄입니다. @Resource는 Java EE CDI 표준입니다. Spring은 (매우 비슷한 @Inject와 마찬가지로) 두 가지 상황 모두에서 똑같은 작업을 수행합니다. @Resource를 권하고 싶습니다. @Autowired는 표준 이전에 만들어졌으며 대부분 이전 버전과의 호환성을 위해 지원되는 것 같습니다.
from https://stackoverflow.com/questions/9106416/difference-between-qualifier-and-resource by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] HibernateJpaVendorAdapter 문제 대신 EclipseLinkJpaVendorAdapter (0) | 2019.01.26 |
---|---|
[SPRING] Spring Cache @Cacheable - 같은 빈의 다른 메소드에서 호출하는 동안 작동하지 않는다. (0) | 2019.01.26 |
[SPRING] 스프링 부트 데이터 JPA - 업데이트 쿼리 수정 - 지속성 컨텍스트 새로 고침 (0) | 2019.01.26 |
[SPRING] HandlerInterceptorAdapter에서 서비스를 Autowire 할 수 없습니다. [duplicate] (0) | 2019.01.26 |
[SPRING] 스프링 웹 MVC : 요청 매개 변수와 경로 변수에 동일한 요청 매핑 사용 (0) | 2019.01.26 |