sessionFactory为空之spring依赖注入

来源:互联网 发布:水上交通安全网络竞赛 编辑:程序博客网 时间:2024/06/02 07:38

开门见山,spring整合hibernate出现了获得的SessionFactory对象为空。

model类,由hibernate在数据库中帮我创建一张user表。
@Entitypublic class User {private int id;private String username;private String password;@Id@GeneratedValue(strategy=GenerationType.IDENTITY)public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}
dao类,将测试类传过来的user插入数据库中。@Repository后面的参数"userDao"表示我这个类以userDao这个名字由spring管理。
@Repository("userDao")public class UserDao {private SessionFactory sessionFactory;public SessionFactory getSessionFactory() {return sessionFactory;}@Resourcepublic void setSessionFactory(SessionFactory sessionFactory) {this.sessionFactory = sessionFactory;}public void addUser(User u) {Session session = sessionFactory.openSession();u.setUsername("曹操");u.setPassword("fuckcao");session.getTransaction().begin();session.save(u);session.getTransaction().commit();}}
test类,测试userDao中的addUser()方法。
public class UserTest {@Testpublic void addUser() {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");UserDao userDao = new UserDao();User u = new  User();userDao.addUser(u);}}
到这里,运行测试类报错,发现sessionFactory为null,原因就是:UserDao对象是我们自己new出来的,不是交给spring代理生成的,所以UserDao中的sessionFactory当然无法由spring帮我们注入了,改成如下测试即可:
将UserDao对象交给spring帮我们注入,测试通过。
public class UserTest {@Testpublic void addUser() {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");UserDao userDao = ctx.getBean("userDao", UserDao.class);User u = new  User();userDao.addUser(u);}}
最后就是配置文件:
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"xmlns:context="http://www.springframework.org/schema/context"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"xmlns:util="http://www.springframework.org/schema/util"xsi:schemaLocation="      http://www.springframework.org/schema/context      http://www.springframework.org/schema/context/spring-context.xsd      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/aop      http://www.springframework.org/schema/aop/spring-aop.xsd"><context:component-scan base-package="com"></context:component-scan><bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/springHibernate" /><property name="username" value="root" /><property name="password" value="root" /></bean><bean id="sessionFactory"class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><property name="dataSource"><ref bean="dataSource" /></property><property name="AnnotatedClasses"><list><value>com.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><!-- 是否根据需要每次自动创建数据库 --><prop key="hibernate.hbm2ddl.auto">create</prop><!-- 显示Hibernate持久化操作所生成的SQL --><prop key="hibernate.show_sql">true</prop></props></property></bean></beans> 






0 0
原创粉丝点击