2

我正在尝试将 xml 配置的 bean 转换为 JavaConfig。xml 版本正在运行,但在使用 JavaConfig 版本时我不断收到错误消息:

Caused by: java.lang.IllegalStateException: No BeanFactory available anymore (probably due to serialization) - cannot resolve interceptor names [cacheAdvisor]
at org.springframework.aop.framework.ProxyFactoryBean.initializeAdvisorChain(ProxyFactoryBean.java:423)

工作xml配置:

<bean id="contentLogic" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="interceptorNames">
        <list>
            <value>cacheAdvisor</value>
        </list>
    </property>
    <property name="proxyInterfaces" value="com.company.logic.ContentLogic"/>
    <property name="target">
        <bean class="com.company.logic.ContentLogicImpl"/>
    </property> 
</bean>

不工作的JavaConfig:

@Configuration
public class SpringConfiguration {

    @Bean
    public ContentLogic getRealContentLogic() throws ClassNotFoundException {
        ProxyFactoryBean factory = new ProxyFactoryBean();
        factory.setInterceptorNames(new String[]{"cacheAdvisor"});
        factory.setTargetClass(ContentLogicImpl.class);
        factory.setProxyInterfaces(new Class[]{ContentLogic.class});
        return (ContentLogic) factory.getObject();
    }
}
4

1 回答 1

3

ProxyFactoryBean在没有 Spring 的帮助下,您正在创建一个新的自己。ProxyFactoryBean需要一个BeanFactory通过setBeanFactory. 实际上ProxyFactoryBean实现BeanFactoryAware. 这意味着,当 Spring 创建实例时,它会自动注入FactoryBean. 您必须自己使用 Java 配置来管理它。但是我认为基于 XML 或基于注释的方式是配置 Spring 的标准方式。为什么要在这里将其转换为基于 Java 的配置?

于 2013-06-30T05:11:57.187 回答