让我先发布full stack trace 。
基本上,我有这个DAO课程:
package nl.alli.persistence.util;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
/**
* Created by thijm on 13-5-2016.
*/
@Component
public class Dao {
@Autowired
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
}
我试图将spring与hibernate 5结合使用来自动装配SessionFactory。
我的spring.xml看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--<!– Register Annotation-based Post Processing Beans –>-->
<!--<context:annotation-config />-->
<!--<!– Scan context package for any eligible annotation configured beans. –>-->
<!--<context:component-scan base-package="nl.alli" />-->
<context:annotation-config/>
<bean id="myDataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://url.url"/>
<property name="password" value="tdjfkladsf"/>
<property name="username" value="jaskdf"/>
</bean>
<bean id="mySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
</value>
</property>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" value="mySessionFactory"/>
</bean>
<!--<bean id="BjornJansonDataCollectorBean" class="nl.alli.pvoutput.BjornJansonDataCollector"/>-->
<!--<bean id="PVOutputDataCollector" class="nl.alli.pvoutput.PVoutputDataCollector"/>-->
<!--<bean id="PVOutputDataServiceImplBean" class="nl.alli.persistence.PVOutputDataServiceImpl"/>-->
<!--<bean id="PVOutputDataDaoImplBean" class="nl.alli.persistence.PVOutputDataDaoImpl"/>-->
<!--<bean id="DaoBean" class="nl.alli.persistence.util.Dao"/>-->
</beans>
甚至IntelliJ也会看到private SessionFactory sessionFactory
与spring.xml
中的bean之间的链接。我不知道造成这种例外的原因是什么,如果有人能帮助我,那就太棒了。
提前致谢!
答案 0 :(得分:1)
发生此错误主要是因为没有从Spring XML文件创建Spring bean,这意味着 spring.xml 没有加载到内存中。
以下是解决问题的一些提示:
检查您是否正在从web.xml正确加载spring.xml
理想情况下,您应将所有bean从 spring.xml 文件移至 applicationContext.xml 文件
答案 1 :(得分:1)
我看到你使用spring-boot。据我所知,默认情况下它没有得到xml配置。
您是否已在代码中的某处将xml导入到java配置中,如此
@ImportResource("classpath:spring.xml")
答案 2 :(得分:0)
看起来您在类路径上缺少库,如果您使用的是Maven,请添加以下内容:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>