spring整合Hibernate使用set方式注入sessionFactory问题
来源:互联网 发布:海龟交易源码 编辑:程序博客网 时间:2024/05/21 06:30
在搭建SSH框架的时候在处理dao层sessionFactory注入的时候遇到一个问题,总是报sessionFactory没有注入成功,其中bean的配置如下所示
<bean id="loginDao" class="cn.com.demo.dao.impl.LoginDaoImpl" scope="prototype"><property name="sessionFactory" ref="sessionFactory"></property></bean>
我使用的是spring2 + hibernate4在dao实现层开始用的是extends HibernateDaoSupport的方式不行,换成extends HibernateTemplate也不行。
解决这个问题我们要搞清楚spring是怎么通过set方式注入依赖的需要配置哪些东西。
1.首先需要在bean中配置需要注入依赖的属性,如上面的代码所示
2.在需要注入依赖的类中配置一个属性,用于接收通过set方法注入的值
3.添加相应的set方法用于spring注入,这个set方法名是set + bean中配置的name对应的值,即加入xml中bean的配置种的name为sessionDemo那么spring就会通过setSessionDemo方法去注入
明确这点就好办了,接着查看了HibernateDaoSupport和HibernateTemplate源码,先看HibernateDaoSupport的源码,源码中我们发现有一个final修饰的setSessionFactory方法,我们知道final修饰的方法是不能被重写的,但是可以被继承,所以子类中是有setSessionFactory。满足了set注入的3条件,因为1中的条件已经满足所以现在只需要确定是否满足2即可。2中所有需要有属性来接收注入的值,我们继续看源码中的setSessionFactory方法,HibernateDaoSupport中是用注入的sessionFactory生成了HibernateTmeplate,并赋值给了hibernateTemplate参数。因此2也是满足的,所以只需要改成下面的代码即可注入成功。
package cn.com.demo.dao.impl;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.springframework.orm.hibernate4.support.HibernateDaoSupport;import cn.com.jnpc.dao.LoginDao;import cn.com.jnpc.entity.User;/** * loginDao持久层 * @author Uself 2017-10-17 下午3:15:11 * */public class LoginDaoImpl extends HibernateDaoSupport implements LoginDao{/** * 根据userName获取User信息 */@Overridepublic User getUserByUserName(String userName) {User user = null;String hql = "from User where user_name = '" + userName + "'";SessionFactory sessionFactory = this.getSessionFactory();Session session = sessionFactory.openSession();Query query = session.createQuery(hql);List list = query.list();if(list != null && list.size() > 0){user = (User) list.get(0);}session.close();return user;}}同样的继承HibernateTemplate也是类似,查看源码并和上面的三点一一对应就能正确的注入,代码如下
package cn.com.demo.dao.impl;import java.util.List;import org.hibernate.Query;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.springframework.orm.hibernate4.HibernateTemplate;import cn.com.jnpc.dao.LoginDao;import cn.com.jnpc.entity.User;/** * loginDao持久层 * @author Uself 2017-10-17 下午3:15:11 * */public class LoginDaoImpl extends HibernateTemplate implements LoginDao{/** * 根据userName获取User信息 */@Overridepublic User getUserByUserName(String userName) {User user = null;String hql = "from User where user_name = '" + userName + "'";SessionFactory sessionFactory = this.getSessionFactory();Session session = sessionFactory.openSession();Query query = session.createQuery(hql);List list = query.list();if(list != null && list.size() > 0){user = (User) list.get(0);}session.close();return user;}}值得注意的是,spring和hibernate版本之间的差异很大,如果直接使用上面的代码还是不行,就要具体的情况具体分析,也就是要去查看源码确定是否是和上面的情况类似,但是总体的思路是不变的。
- spring整合Hibernate使用set方式注入sessionFactory问题
- Spring与Hibernate整合中,使用OpenSessionInViewFilter后出现sessionFactory未注入问题
- Spring注入SessionFactory问题
- Spring整合Hibernate:1、annotation方式管理SessionFactory
- Spring中注入Hibernate的SessionFactory
- spring 自动注入Hibernate中的SessionFactory 探索
- spring hibernate整合时SessionFactory为空
- Spring3与Hibernate4整合,Spring中配置Hibernate基于XML和annotation的sessionFactory方式。
- spring整合hibernate中sessionFactory的两种常用引入方式
- Hibernate集成Spring SessionFactory生成方式
- spring注入方式之set方式注入
- 使用spring注解,注入sessionFactory类
- SSH整合 DAO注入sessionfactory的方式汇总
- spring 整合hibernate整合方式
- hibernate support sessionFactory 注入
- spring set方式注入bean
- Spring 整合 Hibernate 使用全注解Bean出现 sessionFactory' or 'hibernateTemplate' is required
- Spring注入Hibernate的SessionFactory不分离配置文件
- 查询指定日期的前6个月和日期的转换
- 22栈的弹出序列是否正确python
- 使用开源框架ijkplayer播放视频,写给新手不走弯路
- 中国大数据行业发展趋势
- txt文件解析简易框架
- spring整合Hibernate使用set方式注入sessionFactory问题
- 2017.10.17 測試總結并今日總結
- Spring Boot(一)——入门环境搭建
- Linux网络编程知识点
- 论文笔记:Image Captioning with Semantic Attention
- Android 左右侧滑菜单的实现
- 信息论:熵与互信息
- centos 安装 matplotlib
- 性能测试——系统业务指标