共享社区

首页 » 编程技巧共享 » JAVA编程技巧共享 » Spring源代码解析(八):Spring驱动Hibernate的实现
java - 2008-5-23 17:53:00
O/R工具出现之后,简化了许多复杂的信息持久化的开发。Spring应用开发者可以通过Spring提供的O/R方案更方便的使用各种持久化工具,比如Hibernate;下面我们就Spring+Hibernate中的Spring实现做一个简单的剖析。
Spring对Hinberanate的配置是通过LocalSessionFactoryBean来完成的,这是一个工厂Bean的实现,在基类AbstractSessionFactoryBean中:
这个值在afterPropertySet中定义:
我们先看看SessionFactory是怎样创建的,这个方法很长,包含了创建Hibernate的SessionFactory的详尽步骤:
而直接调用org.hibernate.cfg.Configuration来得到需要的SessionFactory:
所以我们这里看到LocalSessionFactory大致起到的一个读取资源配置然后生成SessionFactory的作用;当然这里在得到SessionFactory之后,还需要对session的事务管理作一些处理 -使用了一个Proxy模式对getCurrentSession方法进行了拦截;
拦截器的实现如下:

我们看看getCurrentSession的实现,在SessionFactoryUtils中:
这里就是在Spring中为使用Hiberante的SessionFactory以及Session做的准备工作,在这个基础上,用户可以通过使用HibernateTemplate来使用Hibernate的O/R功能,和以前看到的一样这是一个execute的回调:
我们看看怎样得到对应的Session的,仍然使用了SessionFactoryUtils的方法doGetSession:
这样我们就可以和其他的Template那样使用Hibernate的基本功能了,使用的时候Spring已经为我们对Session的获取和关闭,事务处理的绑定做好了封装 - 从这个角度看也大大方便了用户的使用。
1
查看完整版本: Spring源代码解析(八):Spring驱动Hibernate的实现