4

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

JSF 2、PrimeFaces 3、Spring 3 和 Hibernate 4 集成项目

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

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

但是,在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>

这些类确实存在于相关包中,如下所示以及各种配置文件的位置。

在此处输入图像描述

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

有谁知道这是为什么?

4

3 回答 3

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 是什么,除非您明确告诉它要调用哪个包/类。

于 2013-01-02T15:07:28.667 回答
0

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

我还怀疑Userbean 是一个错误的副本并且已经过去,因为User实例应该从 DAO 中检索或以编程方式创建。

至于为什么它在 Eclipse 中而不在 Netbeans 中起作用,这太奇怪了。一定是有什么乱七八糟的...

于 2013-01-02T15:16:03.447 回答
0

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

在类中,字段上方com.otv.model.User没有注释。@Idid

这是导致我找到错误的答案的链接:休眠异常:org.hibernate.AnnotationException:没有为实体指定标识符:com..domain.idea.MAE_MFEView

于 2016-03-18T15:43:06.803 回答