2013-02-27 5 views
3

Я пытаюсь реализовать Togglz & Spring, используя @Configuration beans, а не XML. Я не уверен, как настроить возвращаемый тип компонента конфигурации. Например: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 но клиенты этого боба требуют SystemClock. Конечно, компилятор увлекается этим.

Я предполагаю, что это просто работает при использовании конфигурации XML. Как мне подойти к нему при использовании компонента конфигурации?

ответ

4

Я не эксперт для стиля конфигурации Java Config от Spring, но я думаю, ваш метод 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(); 
} 

Но я не уверен, если это обычный способ использования FactoryBeans с Spring Java Config.

+0

Эта реализация в случае использования функции переключает бесполезно, потому что ваша реализация будет обнаружена один раз, поскольку она предоставляется как singleton – vvursT

+0

FeatureProxyFactoryBean создаст прокси-сервер, который будет отправлять вызовы методов в правильный экземпляр. Так что все будет хорошо. – chkal

+0

мой плохой. ты прав! – vvursT

Смежные вопросы