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.

Другие вопросы по тегам