복붙노트

[SPRING] Spring : @Qualifier와 Property Placeholder 사용하기

SPRING

Spring : @Qualifier와 Property Placeholder 사용하기

@Qualifier에 대한 속성으로 다음과 같이 속성 자리 표시자를 사용하려고합니다.

@Autowired
@Qualifier("${beanName}")
private MyBean myBean;

그러나 속성 자리 표시자를 String 값으로 사용할 수있는 경우에도이 방법은 작동하지 않습니다.

@Value("${beanName}")
private String beanName;

여기서 좋은 해결 방법은 무엇입니까, 대단히 감사합니다.

해결법

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

    1.동일한 문제가 발생했습니다. 리소스 만 사용하십시오.

    동일한 문제가 발생했습니다. 리소스 만 사용하십시오.

    @Resource(name="${beanName}")
    private MyBean myBean;
    
  2. ==============================

    2.나는 이것이 내 대답이기 때문에 코멘트를 남길 수 없다 :

    나는 이것이 내 대답이기 때문에 코멘트를 남길 수 없다 :

    Adam B가 아마 스프링 프로파일을 사용하여 목표로하는 결과를 얻을 수 있다고 말했기 때문에 (결과는 목표로하고 있습니까?)

    당신이 할 수있는 또 다른 일은 :

    xml 컨텍스트 구성에서 다음과 같이 맵 (spring util 네임 스페이스 사용)을 구성하십시오.

     <util:map id="mapId" key-type="java.lang.String" value-type="com.xxx.interface-or-superclass">
            <beans:entry key="${property.bean.name.1}" value-ref="bean1-defined-elsewehere"/>
            <beans:entry key="${property.bean.name.2}" value-ref="bean2-defined-elsewehere"/>
            <beans:entry key="${property.bean.name.3}" value-ref="bean3-defined-elsewehere"/>
      </util:map> 
    

    그런 다음이 맵을 eg라는 bean에로드 할 수 있습니다. "com.xxx.BeanSelector"

    @Value("#{mapId}")
    private Map<String, com.xxx.interface-or-superclass> myMap;
    

    이 bean에 다음과 같은 메소드를 추가하십시오.

    public interface-or-superclass getBean(String beanName){
        return myMap.get(beanName);
    }
    

    이제는 최종 수업을 다음과 같이 할 수 있습니다.

    @Autowired
    private BeanSelector beanSelector;
    
    @Value("${property.name.the.bean.you.want.to.use}")
    private String beanName;
    
    private interface-or-superclass myBean;
    

    그때 당신은 myBean을 istantiate 할 수 있습니다 (아마도 InitializeBean 인터페이스를 구현한다면 afterPropertiesSet () 메소드 안에있을 것입니다)

    이런 식으로:

    myBean = beanSelector.getBean(beanName);
    // then check ifthe bean is not null or something like that
    

    좋아, 좀 지저분 해. 어쩌면 네가 성취하고자하는 바를 토대로 다른 방식으로 행동 할 수도 있겠지만, 해결 방법이다.

  3. ==============================

    3.그냥 시도해보십시오 (해결할 문제를 실제로 알지 못함). 보통 고정 빈 이름을 사용할 수 있지만 (placeholder가있는 autowire는 지원되지 않음) 속성 값을 기반으로 다른 XML 구현에서 다른 빈 구현을로드 할 수 있습니다.    . Bean 별칭 기반의 솔루션에 대해 생각해보십시오. 내 2 센트

    그냥 시도해보십시오 (해결할 문제를 실제로 알지 못함). 보통 고정 빈 이름을 사용할 수 있지만 (placeholder가있는 autowire는 지원되지 않음) 속성 값을 기반으로 다른 XML 구현에서 다른 빈 구현을로드 할 수 있습니다.    . Bean 별칭 기반의 솔루션에 대해 생각해보십시오. 내 2 센트

  4. from https://stackoverflow.com/questions/18209237/spring-using-qualifier-with-property-placeholder by cc-by-sa and MIT license