최상위 인터페이스 또는 구체적인 구현 중 하나를 주입하도록 요청할 수있는 클래스 계층 구조가 있습니다. 이 특정 코드 영역은 자동 와이어 링 (autowiring)에 의해 지배되므로 콩은 이름 (클래스)에 묶여 있지 않습니다.Spring Beans 사용자 지정
구체적인 구현이 요청 될 때 bean 이름을 지정하거나 한정어를 사용하지 않도록하고 싶습니다. 이는 클래스가 사용 컨텍스트를 설명하고 해당 클래스 중 하나만 사용할 수있는 매우 독특한 상황입니다. 어떤 bean을 사용할지를 알려주기 위해 Spring의 bean resolution 메카니즘에 연결하는 방법이 있습니까? 현재는 x + 1 개의 유효한 일치 항목을 찾습니다. x는 클래스 계층 구조에서 상위 클래스입니다.
이 작업을 수행하는 가장 좋은 방법은 CustomAutowireConfigurer를 사용하여 모든 BeanFactory에서 내 자신의 AutowireCandidateResolver를 설정하는 것입니다. 더 쉬운 FactoryBean 구현이 있습니까? 기본적으로 어떤 콩을 반환할지 결정하기 전에 DependencyDescriptor를보고 싶습니다.
public class XyzFactoryBean implements FactoryBean<TopLevelInterface> {
@Override
public TopLevelInterface getObject() throws Exception {
if(life is good) {
return new LifeIsGood();
} else
return new LifeIsBetterThanGood();
}
@Override
public Class<? extends TopLevelInterface> getObjectType() {
if(life is good) {
return LifeIsGood.class;
} else
return LifeIsBetterThanGood.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
: