我的SessionFactory没有被注入SessionFactory变量。我的配置如下:
<?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:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.2.xsd">
<mvc:annotation-driven/>
<tx:annotation-driven/>
<context:annotation-config/>
<!-- Scans the package for contents -->
<context:component-scan base-package="com.csu.library.mvc"/>
<!-- Maps static resources like images, css, javascript files -->
<mvc:resources location="/resources/" mapping="/resources/**"/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name = "viewClass" value = "org.springframework.web.servlet.view.JstlView"/>
<property name = "prefix" value = "/WEB-INF/jsps/"/>
<property name = "suffix" value = ".jsp"/>
</bean>
<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/csu_library"/>
<property name="username" value="csulibrary"/>
<property name="password" value="csulibrary"/>
<!-- Pool Properties -->
<property name="initialSize" value="5" />
<property name="maxIdle" value="5" />
<property name="maxActive" value="10" />
</bean>
<bean id = "hibernateProperties" class = "java.util.Properties">
<constructor-arg index="0">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.hbm2ddl.auto">update</prop>
<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
<prop key="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</prop>
</props>
</constructor-arg>
</bean>
<bean id = "sessionFactory" class = "org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="packagesToScan" value = "com.csu.library.mvc"/>
<property name="dataSource" ref = "dataSource"/>
<property name="hibernateProperties" ref = "hibernateProperties"/>
</bean>
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name = "sessionFactory" ref = "sessionFactory"/>
</bean>
</beans>
HibernateUtil.class
package com.csu.library.mvc.hibernate;
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.orm.hibernate4.HibernateExceptionTranslator;
import org.springframework.orm.hibernate4.HibernateTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;
@org.springframework.context.annotation.Configuration
@EnableTransactionManagement
public class HibernateUtil {
@Autowired
@Qualifier("sessionFactory")
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
@Bean
public HibernateTransactionManager transactionManager() {
return new HibernateTransactionManager(getSessionFactory());
}
@Bean
public HibernateExceptionTranslator exceptionTranslator() {
return new HibernateExceptionTranslator();
}
}
当调用getSessionFactory()方法时,程序抛出 NullPointerException 。显然,sessionFactory没有被注入。该程序启动正常。可能是什么问题?
答案 0 :(得分:2)
@Autowired
@Qualifier("sessionFactory")
private SessionFactory sessionFactory;
public Session getSession() {
return sessionFactory.getCurrentSession();
}
希望能帮到你:)。
答案 1 :(得分:0)
在某些Spring版本中,不会扫描子文件夹。 在com.csu.library.mvc包中移动您的类,或者在扫描的包中添加com.csu.library.mvc.hibernate包并尝试一下。
答案 2 :(得分:0)
您需要使用org.springframework.beans.factory.annotation.Autowired
注释而不是javax.inject.Inject
。
@Autowired
private SessionFactory sessionFactory;
答案 3 :(得分:0)
请注意,仅查找相同的Bean上的注释 它定义的应用程序上下文。这意味着,如果你输入 一个DispatcherServlet的WebApplicationContext,它只检查你的@Autowired bean 控制器 ,而不是您的服务。