Togglz с компонентом Spring @Configuration
Я пытаюсь реализовать Togglz & Spring, используя бины @Configuration, а не XML. Я не уверен, как настроить тип возвращаемого компонента конфигурации. Например:
@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-конфигурация. Как я должен подходить к нему при использовании bean-компонента конфигурации?
1 ответ
Решение
Я не эксперт по стилю конфигурации 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.