首页 文章

无法解析对bean的引用'sessionFactory'

提问于
浏览
1

我正在使用spring,hibernate maven项目获得异常无法解析对dispatcher servlet.xml文件中bean'sessionFactory'的引用 . 下面我添加了三个文件内容 . dispatcherservlet和应用程序上下文都在资源文件夹中 . 问题是什么?请帮忙

我的错误:org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是org.springframework.beans.factory.BeanCreationException:在类路径资源[dispatcher-servlet.xml]中定义名称为'stockBo'的bean时出错:在设置bean属性'stockDao'时无法解析对bean'stockDao'的引用;嵌套异常是org.springframework.beans.factory.BeanCreationException:在类路径资源[dispatcher-servlet.xml]中定义名称为'stockDao'的bean时出错:在设置bean属性'sessionFactory'时无法解析对bean'sessionFactory'的引用;嵌套异常是org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为'sessionFactory'的bean

Dispatcher-servlet.xml文件

<!-- Stock Data Access Object -->

<bean id="stockBo" lazy-init="true" class="com.org.rolltickets.stock.bo.impl.StockBoImpl" >
<property name="stockDao">
<ref local="stockDao" />
</property>
</bean>


 <bean id="stockDao" lazy-init="true" class="com.org.rolltickets.stock.dao.impl.StockDaoImpl" >
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>

Applcaitioncontext.xml

<!-- Hibernate session factory -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>
        <property name="hibernateProperties">
            <props>
                <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
                <prop key="hibernate.show_sql">true</prop>
            </props>
        </property>

        <property name="mappingResources">
            <list>
                <value>/hibernate/Stock.hbm.xml</value>
            </list>
        </property>

    </bean>

Web.xml文件

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:ApplicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout>
</session-config>

1 回答

  • 1

    将您的dispatcher-servlet.xml中的配置移动到另一个名为root-servlet.xml的xml文件中(该名称实际上并不重要,重要的是您将其移动到新文件中) .

    将dispatcher-servlet.xml文件留空 .

    然后在web.xml中添加新的XML文件,列出ApplicationContext.xml

    它应该如下所示:

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:ApplicationContext.xml</param-value>
        <param-value>classpath:root-servlet.xml</param-value> 
     <context-param>
    

    发生了什么,是servlet在运行 ApplicationContext.xml 文件之前运行 dispatcher-servlet.xml 中的代码 .

    所以 dataSource bean还不存在 . 首先运行ApplciationContext.xml,您将创建bean,因此它将可用 .

相关问题