Spring BeanCreationException:无法解析对bean异常的引用

时间:2013-01-02 15:02:40

标签: spring

我正在以下网站上尝试示例应用程序:

JSF 2, PrimeFaces 3, Spring 3 & Hibernate 4 Integration Project

但我发现在运行项目时,我得到了:

  

SEVERE:将上下文初始化事件发送到类org.springframework.web.context.ContextLoaderListener的侦听器实例的异常   org.springframework.beans.factory.BeanCreationException:在ServletContext资源[/WEB-INF/applicationContext.xml]中定义名称为'UserService'的bean时出错:在设置bean属性'userDAO'时无法解析对'UserDAO'的引用;嵌套异常是org.springframework.beans.factory.BeanCreationException:在ServletContext资源中定义名为'UserDAO'的bean时出错[/WEB-INF/applicationContext.xml]

但是,在applicationContext.xml文件中,相关代码如下:

<!-- Beans Declaration -->
<bean id="User" class="com.otv.model.User"/>

<!-- User Service Declaration -->
<bean id="UserService" class="com.otv.user.service.UserService">
  <property name="userDAO" ref="UserDAO" />
</bean>

<!-- User DAO Declaration -->
<bean id="UserDAO" class="com.otv.user.dao.UserDAO">
 <property name="sessionFactory" ref="SessionFactory" />
</bean>

<!-- Session Factory Declaration -->
<bean id="SessionFactory"    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
 <property name="dataSource" ref="DataSource" />
 <property name="annotatedClasses">
  <list>
   <value>com.otv.model.User</value>
 </list>
</property>
<property name="hibernateProperties">
 <props>
  <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
  <prop key="hibernate.show_sql">true</prop>
 </props>

  

这些类确实存在于相关的包中,并且可以在下面看到各种配置文件的位置。

enter image description here

我可以在教程和我的实现之间看到的唯一区别是我使用的是NetBeans 7.2而不是Eclipse。

有没有人知道为什么会这样?

3 个答案:

答案 0 :(得分:0)

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UserService' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'UserDAO' while setting bean property 'userDAO';

这告诉您无法创建UserService,因为它缺少属性定义

 nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'UserDAO' defined in ServletContext resource [/WEB-INF/applicationContext.xml]

这告诉您无法找到UserDAO的定义。

你缺少UserDao定义,ref只是意味着它应该属于那种类型,它仍然需要一个bean定义。

基本上,每当你使用“ref”时,你都会告诉spring制作这种类型的属性。该类型需要在其自己的bean定义中定义。

因此,如果UserDao使用了另一个由“ref”定义的属性,那么该属性也需要自己的bean定义。

您必须将类和弹簧定义视为两个完全独立的实体。类可能在那里并放在它们应该的位置,但是spring需要它的bean定义才能调用它们。除非您明确告诉它要调用哪个包/类,否则它不知道UserDao或SessionFactory是什么。

答案 1 :(得分:0)

/WEB-INF/applicationContext.xml应包含类似<bean id="UserDAO" class="com.otv.dao.UserDAO">...</bean>的条目,其属性很大程度上取决于所使用的后端系统。

我还怀疑User bean是一个错误的副本,过去的User实例应该从DAO中重新获取或以编程方式创建。

至于为什么它在Eclipse中而不是在Netbeans中工作,实在是太奇怪了。一定有些杂乱......

答案 2 :(得分:0)

我找到了该错误的主要原因。它实际上很简单。

在课程com.otv.model.User中,字段@Id上方没有id注释。

以下是答案的链接,引导我找出错误:hibernate exception: org.hibernate.AnnotationException: No identifier specified for entity: com..domain.idea.MAE_MFEView