欢迎来到天天文库
浏览记录
ID:31643509
大小:85.92 KB
页数:14页
时间:2019-01-16
《spring源代码解析(八):spring驱动hibernate的实现》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、0/R工具出现之后,简化了许多复杂的信息持久化的开发。Spring应用开发者可以通过Spring提供的0/R方案更方便的使用各种持久化工具,比如Hibernate;下面我们就Spring+Hibernate中的Spring实现做一个简单的剖析。Spring对Hinberanate的配置是通过LocalSessionFactoryBean来完成的,这是一个工厂Bean的实现,在基类AbstractSessionFactoryBean中:Java代码/***这是FactoryBean需要实现的接口方法,直接取得当前的sessionFactory的值*/pu
2、blicObjectgetObject(){returnthis.sessionFactory;这个值在afterPropertySet中定义:publicvoidafterPropertiesSet()throwsException{//这个buiIdSessionFactory是通过配置信息得到SessionFactory的地方SessionFactoryrawSf=buildSessionFactory();//这里使用了Proxy方法插入对getCurrentSession的拦截,得到和事务相关的sessionthis.sessionFacto
3、ry二wrapSessionFactorylfNecessary(rawSf);}我们先看看SessionFactory是怎样创建的,这个方法很长,包含了创建Hibernate的SessionFactory的详尽步骤:protectedSessionFactorybuildSessionFactory()tbrowsExcept!on{SessionFactorysf=null;//CreateConfigurationinstance.Configurationconfig=newConfiguration();//这里配置数据源,事务管理器,Lob
4、Hander到Holder中,这个Holder是一个ThreadLocal变量,这样这些资源就和线程绑定了if(this.dataSource!二null){//MakegivenDataSourceavailableforSessionFactoryconfiguration.configTimeDataSourceHolder.set(this.dataSource);}if(this.jtaTransactionManager!二null){//MakeSpring-providedJTATransactionManageravailable.c
5、onfigTimeTransactionManagerllolder.set(this.jtaTransactionManager);}if(this.lobHandler!=null){//MakegivenLobHandleravailableforSessionFactoryconfiguration.//Doearlybecausebecausemappingresourcemightrefertocustomtypes.configTimeLobHandlerHolder.set(this.lobHandler);}〃这里是使用Hiberna
6、te的各个属性的配置,这里使用了Configuration类来抽象这些数据try{//Setconnectionreleasemode〃on_close〃asdefault.//ThiswasthecaseforHibernate3.0;Hibernate3.1changed//itto〃auto〃(i.e.,zafter_statement"orz,after_transaction〃)•//However,forSpring,sresourcemanagement(inparticularfor//HibernateTransactionManag
7、er),〃on_close〃isthebetterdefault.config.setProperty(Environment.RELEASE_CONNECTIONS,ConnectionReleaseMode.ON_CLOSE.toStringO);if(!isExposeTransactionAwareSessionFactory()){//NotexposingaSessionFactoryproxywithtransaction-aware//getCurrentSession()method->setHibernate3.1CurrentSe
8、ssionContext//implementationinstead,providingth
此文档下载收益归作者所有