2013-06-28 2 views
2

Я пытаюсь преобразовать компонент, настроенный на xml, в JavaConfig. версия XML работает, но при использовании версии JavaConfig я получаю сообщение об ошибке:Spring Framework: больше нет BeanFactory (возможно, из-за сериализации)

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

ответ

3

Вы создаете новый ProxyFactoryBean самостоятельно без помощи Весны. ProxyFactoryBean нуждается в BeanFactory, который вводится через setBeanFactory. Фактически ProxyFactoryBean реализует BeanFactoryAware. Это означает, что когда Spring создает экземпляр, он автоматически вводит FactoryBean. Вам придется управлять этим с помощью конфигурации Java. Однако я думаю, что XML или аннотация основаны на стандартном способе конфигурации Spring. Почему вы хотите преобразовать его в конфигурацию на Java?

+0

Все остальные компоненты, кроме этого, были удалены из XML, так как теперь мы используем @Component. Так что было бы неплохо избавиться от финального :-) Я попробую ваше предложение и отчитаю! –

+0

Работал отлично, спасибо! Вот еще один код: factory.setBeanFactory (beanFactory); –