UFO ET IT

@Qualifier와 @Resource의 차이

ufoet 2023. 8. 21. 23:04
반응형

@Qualifier와 @Resource의 차이

나는 두 가지 방법 사이에 차이가 없다고 생각합니다. @Qualifier는 항상 @Autowired와 함께 사용됩니다.

@Autowired
@Qualifier("alpha")

@Resource(name="alpha")

누가 나에게 차이점을 알려줄 수 있습니까?감사합니다!

@Autowired단독으로 사용할 수 있습니다.단독으로 사용할 경우 유형별로 유선으로 연결되므로 동일한 유형의 콩이 하나 이상 용기에 다음과 같이 선언될 경우 문제가 발생합니다.@Autowired어떤 콩을 주사해야 할지 모르겠습니다.결과적으로, 사용합니다.@Qualifier와 함께@Autowired콩 이름을 지정하여 실제로 배선할 콩을 명확히 함(이름으로 배선)

@Resource이름으로도 연결되어 있습니다.그래서 만약에@Autowired와 함께 사용됩니다.@Qualifier그것은 그것과 같습니다.@Resource.

다른 점은@Autowired그리고.@Qualifier스프링 주석은 반면에@Resource는 (JSR-250에서) 표준 Java 주석입니다.게다가.@Resource필드 및 세터 주입만 지원하는 동안@Autowired필드, setter, setter 및 다중 스레드 메소드 주입을 지원합니다.

를 사용하는 것이 좋습니다.@Resource필드 및 세터 주입용입니다.고수@Qualifier그리고.@Autowired생성자 또는 다중 변수 방법 주입에 사용할 수 있습니다.

참조:

주석 기반 주입을 이름으로 표현하려면 기술적으로 @Qualifier 값을 통해 빈 이름을 참조할 수 있는 경우에도 @Autowired를 주로 사용하지 마십시오.대신, 선언된 유형이 일치 프로세스와 관련이 없으며 고유한 이름으로 특정 대상 구성 요소를 식별하도록 의미적으로 정의된 JSR-250 @Resource 주석을 선호합니다.

저는 @Autowired와 관련된 몇 가지 문제에 직면하고 있다가 @Qualifier를 사용하기 시작했고 마침내 같은 유형의 여러 콩이 정의될 때 @Autowired를 @Qualifier와 함께 사용해야 하는 시기를 알아낼 수 있었습니다.

같은 유형이지만 다른 값을 가진 두 개의 콩을 정의한다고 가정합니다.

<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를 사용하려는 경우 빈 이름과 동일한 변수 이름을 사용해야 합니다. 그렇지 않으면 여러 유형이 발견된 것과 같은 오류가 발생합니다.

@Autowired
AppContext appContext;

위의 사용 사례에서는 한정자를 사용해야 합니다.

@Autowired
@Qualifier("appContext1")
AppContext appContext;

대신 빈 이름과 동일한 변수 이름을 사용하는 경우 @Qualifier를 사용하지 않을 수 있습니다.

@Autowired
AppContext appContext1;

저는 항상 빈 이름과 같은 변수 이름을 사용하고 있었는데 실수로 다른 변수 이름을 가지고 있어서 이 문제에 직면했습니다.

의심스러운 점이 있으면 제게 알려주세요.

@자동배선은 오래된 학교 봄입니다.@리소스는 Java EECDI 표준입니다.스프링은 (매우 유사한 @Inject뿐만 아니라) 두 가지 상황 모두를 처리하고 거의 동일한 작업을 수행합니다.@Resource, @Autowired는 표준 이전에 만들어졌으며 주로 하위 호환성을 위해 지원되는 것으로 보입니다.

언급URL : https://stackoverflow.com/questions/9106416/difference-between-qualifier-and-resource

반응형