【问题标题】:Togglz with Spring @Configuration beanTogglz 与 Spring @Configuration bean
【发布时间】:2013-02-27 06:56:13
【问题描述】:

我正在尝试使用 @Configuration bean 而不是 XML 来实现 Togglz 和 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 时应该如何处理?

【问题讨论】:

    标签: spring togglz


    【解决方案1】:

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

    但我不确定这是否是将 FactoryBeans 与 Spring Java Config 一起使用的常用方法。

    【讨论】:

    • 这个实现是在使用功能切换无用的情况下,因为你的实现将被发现一次,因为它是作为单例提供的
    • FeatureProxyFactoryBean 将创建一个代理,它将方法调用分派到正确的实例。所以这会很好。
    • 这个方法声明返回一个 FeatureProxyFactoryBean,但是你返回一个 SystemClock。这不会导致 ClassCastException 吗?
    • 谢谢。刚刚解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-20
    • 2012-11-15
    • 2021-03-01
    • 1970-01-01
    • 2014-03-27
    相关资源
    最近更新 更多