上下文初始化失败 - BeanCreationNotAllowedException

时间:2011-09-21 01:10:36

标签: java spring dependency-injection cxf

我的应用程序的Spring Context无法初始化。任何人都可以帮助我理解它为什么失败以及如何解决它?

以下是警告&我收到的错误消息:

  

[WARN]在bean上调用destroy方法'shutdown'失败   名称'cxf'

     

org.springframework.beans.factory.BeanCreationNotAllowedException:   创建名为'entityManagerFactory'的bean时出错:Singleton bean   当这家工厂的单身人士进入时,不允许创作   破坏(不要在destroy中从BeanFactory请求bean   方法实现!)

     

org.springframework.web.context.ContextLoader   [ERROR]上下文初始化失败

<bean id="cxf" class="org.apache.cxf.bus.CXFBusImpl" destroy-method="shutdown"/>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
       <property name="persistenceUnitName" value="${persistence.unit}"/>
       <property name="dataSource" ref="pooledDs"/>
       <property name="jpaVendorAdapter">
           <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
               <property name="databasePlatform" value="org.hibernate.dialect.MySQLDialect"/>
               <property name="showSql" value="false"/>
               <property name="generateDdl" value="false"/>
           </bean>
       </property>    
</bean> 

2 个答案:

答案 0 :(得分:4)

CXF网站在其示例配置中不包含destroy-method调用,因此看起来这是一个配置错误。有关详细信息,请参阅此页:http://cxf.apache.org/docs/interceptors.html

我还发现了此问题的错误跟踪器:https://issues.apache.org/jira/browse/CXF-2164。似乎在早期版本的CXF中没有隐式调用destroy方法,但是在v2.2.11中已经修复了它。

所以,我的建议是至少启动该版本,并在配置中使用<bean id="cxf" class="org.apache.cxf.bus.CXFBusImpl" />

答案 1 :(得分:0)

在我的情况下,我在版本2.5.0中遇到了同样的问题,但那是我的错。

我在上下文中有错误的bean。

详细说明:我使用@Controller注释了Spring MVC Controller(名为OrderController),没有定义名称(注释驱动)。在另一个CXF上需要xml配置AFAIK,所以我使用java配置命名bean(使用@Bean)作为orderController并且以某种方式初始化cxf时Spring使用了这个错误的MVC控制器并且在上面列出的错误时失败了。

  

org.springframework.beans.factory.BeanCreationNotAllowedException:创建名为'cxf'的bean时出错:当此工厂的单例处于销毁状态时不允许使用单例bean创建(不要在destroy方法实现中从BeanFactory请求bean) !)