2013-02-27 97 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

相關問題