복붙노트

[SPRING] @Qualifier와 @Resource의 차이점

SPRING

@Qualifier와 @Resource의 차이점

@Qualifier는 @Autowired와 항상 함께 사용됩니다.

@Autowired
@Qualifier("alpha")

VS

@Resource(name="alpha")

누구나 그 차이를 알려 줄 수 있니? 감사!

해결법

  1. ==============================

    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. ==============================

    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. ==============================

    3.@Autowired는 올드 스쿨 봄입니다. @Resource는 Java EE CDI 표준입니다. Spring은 (매우 비슷한 @Inject와 마찬가지로) 두 가지 상황 모두에서 똑같은 작업을 수행합니다. @Resource를 권하고 싶습니다. @Autowired는 표준 이전에 만들어졌으며 대부분 이전 버전과의 호환성을 위해 지원되는 것 같습니다.

    @Autowired는 올드 스쿨 봄입니다. @Resource는 Java EE CDI 표준입니다. Spring은 (매우 비슷한 @Inject와 마찬가지로) 두 가지 상황 모두에서 똑같은 작업을 수행합니다. @Resource를 권하고 싶습니다. @Autowired는 표준 이전에 만들어졌으며 대부분 이전 버전과의 호환성을 위해 지원되는 것 같습니다.

  4. from https://stackoverflow.com/questions/9106416/difference-between-qualifier-and-resource by cc-by-sa and MIT license