spring实现将hibernate的session绑定到请求的方法
来源:互联网 发布:mysql 5.9修改密码 编辑:程序博客网 时间:2024/05/24 05:09
<!-- /* Font Definitions */ @font-face{font-family:宋体;panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-alt:SimSun;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:"/@宋体";panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal{mso-style-parent:"";margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;mso-pagination:none;font-size:10.5pt;mso-bidi-font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:宋体;mso-font-kerning:1.0pt;} /* Page Definitions */ @page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section1{size:595.3pt 841.9pt;margin:72.0pt 90.0pt 72.0pt 90.0pt;mso-header-margin:42.55pt;mso-footer-margin:49.6pt;mso-paper-source:0;layout-grid:15.6pt;}div.Section1{page:Section1;}-->
项目中用到了OpenSessionInViewFilter来将hibernate的session对象绑定到每个请求线程中,如此,只要在一个请求过程中与session发生过关联的对象(也就是持久态对象)不管事务提交没提交,直到请求结束该对象都会一直保持持久态。
知其然更要知其所有然,那么spring是如何实现这个绑定,又是如何用它来进行事务管理的呢?
通过查看spring源代码可以发现:在OpenSessionInViewFilter中有个doFilterInternal方法,在这个方法里面有段这样的代码:
Session session =getSession(sessionFactory); TransactionSynchronizationManager.bindResource(sessionFactory, newSessionHolder(session));
看到这里不难发现,每个请求被这个filter拦截的时候都会有一个session被TransactionSynchronizationManager.bindResource()方法保存了起来,那么这个session被保存到了那里呢?通过查看bindResource()这个方法可以发现该session对象其实是被sessionHolder(session)包装后以sessionFactory为key,sessionholder为value保存到了一个map对象中,map对象又被保存到了TransactionSynchronizationManager类的一个ThreadLocal类型的属性中,借由将session保存到threadlocal中实现了将session绑定到请求的功能。
在spring的HibernateTransactionManager中通过调用
SessionHolder sessionHolder =(SessionHolder)TransactionSynchronizationManager.getResource(getSessionFactory());方法来获取请求开始的时候保存到请求线程的session,从而实现了session的生命周期在整个请求过程中都有效的功能
真不敢想象要是Java没了threadLoacl spring该怎么办。。。
- spring实现将hibernate的session绑定到请求的方法
- Spring中获得Hibernate Session的方法
- spring请求中数据绑定到控制器的方式探究
- 求解——spring+Hibernate中Dao内的方法执行到Session session=getSession();后停止运行
- hibernate session的方法
- 将后台数据显示到前台页面的方法springmvc+hibernate+spring
- 将 DataRow[ ] 绑定到 DataList 上的方法:
- 将数据绑定到控件的方法总结
- 将DataTable绑定到wpf的ComboBox控件方法
- 利用ThreadLocal绑定Hibernate的session
- Hibernate绑定session以及api的使用
- spring+hibernate的session问题
- spring+hibernate的session问题
- Spring+hibernate的session问题
- Hibernate+Spring中取得当前Session的方法
- 在spring MVC和hibernate项目中如何实现hibernate的session在请求发起时开启数据渲染后自动关闭
- ssh整合:将hibernate的配置信息,配置到Spring的配置文件中(Spring整合hibernate)
- Hibernate Session的delete()方法
- git使用(一)(转载)
- ssh框架的一种实现方式
- 使用Pluto+Tomcat 开发遇到的问题和总结 (2)
- 奥运英语[13] 我想要你见见我的朋友 I’d like you to meet my friend.
- 为应用程序设计一个合适的架构
- spring实现将hibernate的session绑定到请求的方法
- 精典语录
- git使用(二)(转载)
- s3c2410 NandFlash K9F1208U0A /K9F1208U0B的读取操作1 (转)
- 如何获取本机MAC地址 和 IP
- google map api sample
- 谈谈你对MVC和三层架构的理解?(月薪三万的面试题)
- MDI 界面开发
- http://spdbank.asia is my site.