2013-02-27 4 views
3

XML 대신 @Configuration 빈을 사용하여 Togglz & 봄을 구현하려고합니다. 구성 빈의 리턴 유형을 구성하는 방법을 모르겠습니다. 예를 들어 :Spring @Configuration 빈을 사용하는 Togglz

@Configuration 
public class SystemClockConfig { 

    @Bean 
    public SystemClock plainSystemClock() { 
     return new PlainSystemClock(); 
    } 

    @Bean 
    public SystemClock awesomeSystemClock() { 
     return new AwesomeSystemClock(); 
    } 

    @Bean 
    public FeatureProxyFactoryBean systemClock() { 
     FeatureProxyFactoryBean proxyFactoryBean = new FeatureProxyFactoryBean(); 
     proxyFactoryBean.setActive(awesomeSystemClock()); 
     proxyFactoryBean.setInactive(plainSystemClock()); 
     proxyFactoryBean.setFeature(Features.AWESOME_SYSTEM_CLOCK.name()); 
     proxyFactoryBean.setProxyType(SystemClock.class); 
     return proxyFactoryBean; 
    } 
} 

systemClock 방법은 FeatureProxyFactoryBean을 반환하지만이 빈의 클라이언트는 SystemClock이 필요합니다. 물론, 컴파일러는 이걸로 괴롭힌다.

XML 구성을 사용할 때 작동하는 것으로 상상해보십시오. 구성 빈을 사용할 때 어떻게 접근해야합니까?

답변

4

저는 Spring의 Java Config 구성 스타일에 대한 전문가는 아니지만, systemClock() 메서드는 FeatureProxyFactoryBean으로 만든 프록시를 반환해야한다고 생각합니다. 다음과 같은 것 :

@Bean 
public SystemClock systemClock() { 
    FeatureProxyFactoryBean proxyFactoryBean = new FeatureProxyFactoryBean(); 
    proxyFactoryBean.setActive(awesomeSystemClock()); 
    proxyFactoryBean.setInactive(plainSystemClock()); 
    proxyFactoryBean.setFeature(Features.AWESOME_SYSTEM_CLOCK.name()); 
    proxyFactoryBean.setProxyType(SystemClock.class); 
    return (SystemClock) proxyFactoryBean.getObject(); 
} 

그러나 이것이 Spring Java Config로 FactoryBeans를 사용하는 일반적인 방법인지 확실하지 않습니다.

+0

이 구현은 싱글 톤 – vvursT

+0

FeatureProxyFactoryBean이 메소드 호출을 올바른 인스턴스로 전달하는 프록시를 생성하기 때문에 구현이 한 번 발견되기 때문에 유용하지 않은 토글을 사용하는 경우에 유용합니다. 그래서 이것은 잘 동작 할 것입니다. – chkal

+0

내 잘못입니다. 네가 옳아! – vvursT