복붙노트

[SPRING] @Qualifier의 SpEL은 같은 bean을 참조합니다.

SPRING

@Qualifier의 SpEL은 같은 bean을 참조합니다.

같은 bean의 다른 속성을 기반으로 해결되는 bean 참조를 삽입하는 데 관심이 있습니다.

@Autowired
@Qualifier("#{'prefix' + actualQualifier}")
private OtherBean otherBean

private String actualQualifier;

이것은 "actualQualifier"와 "otherBean"사이의 관계가 맞는지 확인합니다.

OtherBean 유형으로 구성된 많은 bean이 있습니다.

autowiring / injection이 시작되기 전에 "actualQualifier"에 값이 설정되어 있는지 확인할 수 있습니다.

현재 autowired되고있는 같은 bean에서 다른 속성 값 (JavaBean 의미에서)을 참조 할 방법을 찾을 수 없습니다.

해결법

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

    1.AFAIK,이 작동하지 않습니다. SpEL은 둘러싼 클래스의 변수에 액세스 할 수 없습니다. 어쨌든 @Qualifier가 SpEL 표현식을 처리하지 않는 것 같습니다.

    AFAIK,이 작동하지 않습니다. SpEL은 둘러싼 클래스의 변수에 액세스 할 수 없습니다. 어쨌든 @Qualifier가 SpEL 표현식을 처리하지 않는 것 같습니다.

    몇 가지 테스트를 수행하고 SpEL 표현식을 @Qualifier 값으로 사용하는 방법을 찾지 못했습니다. Spring 포럼의이 페이지 (그리고 Spring의 오류 메시지)는 사실 @Qualifier가 String을 사용하고 SpEL 표현식을 평가하지는 않는다고 생각합니다.

    내 결론은 그 길은 당신을 막 다른 길로 안내 할 것입니다.

    이 다른 대답에서 제안한 것처럼, 나는 당신이 더 나은 선택기 콩을 사용하여 init 메서드에서 otherBean을 설정하는 것이 좋을 것 :

    @Bean(initMethod="init")
    class MyBean {
    ...
        @Autowired
        private BeanSelector beanSelector;
        private OtherBean otherBean
        private String actualQualifier;
    
        public void init() {
            otherBean = beanSelector(actualQualifier);
        }
    ...
    }
    

    beanSelector에 otherBean의 선택에 대한 모든 정보를 넣으십시오.

  2. from https://stackoverflow.com/questions/29772418/spel-in-qualifier-refer-to-same-bean by cc-by-sa and MIT license