2013-02-27 64 views
3

我试图实现Togglz & Spring使用@Configuration bean而不是XML。我不知道如何配置Configuration bean的返回类型。例如:Togglz with Spring @Configuration bean

@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,但这个bean的客户端需要一个SystemClock。当然,编译器对此感到厌烦。

我想它只是在使用XML配置时才起作用。使用配置bean时应该如何处理它?

回答

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(); 
} 

但我不知道这是使用的FactoryBean用的Spring Java配置的常用方法。

+0

此实现是在使用功能切换无用的情况下,因为您的实现将被发现一次,因为它作为singleton提供 – vvursT 2014-03-24 06:44:26

+0

FeatureProxyFactoryBean将创建一个代理,该代理将调用方法调用到正确的实例。所以这将工作正常。 – chkal 2014-03-26 12:53:04

+0

我的不好。你是对的! – vvursT 2014-03-28 14:08:26