2011-10-13 2 views
0

최상위 인터페이스 또는 구체적인 구현 중 하나를 주입하도록 요청할 수있는 클래스 계층 구조가 있습니다. 이 특정 코드 영역은 자동 와이어 링 (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; 
    } 
} 
:

답변

0

당신이 FactoryBean 간단 봤어