5

我正在尝试使用 @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方法返回 aFeatureProxyFactoryBean但此 bean 的客户端需要 a SystemClock。当然,编译器对此感到非常震惊。

我想它只在使用 XML 配置时才有效。使用配置 bean 时我应该如何处理它?

4

1 回答 1

5

我不是 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 一起使用的常用方法。

于 2013-02-27T07:40:17.207 回答