Spring中LocalSessionFactoryBean与SessionFactory

相信不少人多纠结LocalSessionFactoryBean与SessionFactory到底是什么关系,怎么去进行关联的,正如图所示:

transactonManager有一个对sessionFactory的引用,现在我们来看下org.springframework.orm.hibernate4.HibernateTransactionManager源码:

我们会发现transactonManager的sessionFactory和org.springframework.orm.hibernate4.LocalSessionFactoryBean根本不是一个类型,也不存在父子关系,那怎么在spring配置文件中可以用transactonManager引用sessionFactory,下面我们看下org.springframework.orm.hibernate4.LocalSessionFactoryBean的源码:

在afterPropertiesSet()方法中我们发现如下代码:

,通过注释我们知道这块是创建SessionFactory实例,同时我们注意到如下代码:

这段代码是返回一个SessionFactory实例,

当引用LocalSessionFactoryBean 的时候,比如applicationContext.getBean("localSessionFactoryBean ")这样,spring返回的不是LocalSessionFactoryBean 本身,他会自动调用getObject()这个方法,把真正的session factory返回。用<ref bean="">这样引用也一样,得到的都是session factory而不是LocalSessionFactoryBean 。这里代码没贴全,有兴趣的话去看看源代码。所以不需要再显式地创建一个session factory,直接引用LocalSessionFactoryBean 就可以了。

LocalSessionFactoryBean实现了org.springframework.beans.factory.FactoryBean接 口, spring在装配的时候, 如果发现实现了org.springframework.beans.factory.FactoryBean接口, 就会使用FactoryBean#getObject() 方法返回的对象装配,具体的可以看下文档.如果你想拿到LocalSessionFactoryBean实例, 在id前面加个‘&‘就可以了,在你的配置文件中BeanFactory.getBean(‘&sessionFactory‘)拿到的 就是LocalSessionFactoryBean的实例

时间: 2024-08-28 22:03:20

Spring中LocalSessionFactoryBean与SessionFactory的相关文章

关于Spring中配置LocalSessionFactoryBean来生成SessionFactory

转载http://m.blog.csdn.net/blog/SpbDev/8545372     学习Spring的过程中,一直不理解为何配置的bean的class是LocalSessionFactoryBean,得到的却是SessionFactory,Google之后发现有诸多童鞋有相似的问题,于是转载来分享: LocalSessionFactoryBean 本身不是一个session factory,但是spring会自动把对这个bean的引用替换成LocalSessionFactoryBe

spring配置hibernate的sessionFactory的几种方法

分类: JAVA Spring Hibernate 2013-01-27 20:47  1851人阅读  评论(0)  收藏  举报 spring配置hibernate的sessionFactory 之前用spring2+hibernate3+struts2开发了一个彩信发布系统,由于第一次使用此架构,造成applicationContext.xml中的配置非常冗长,而且经常因为更改一个小配置项(例:数据库ip.用户名.密码等)将此文件作修改,这及不利于项目维护,万一粗心造成其他地方变动,会对本

2、Spring的LocalSessionFactoryBean创建过程源码分析

spring的LocalSessionFactoryBean生成过程与hibernate的SessionFactory生成过程是高度吻合的. 为了后面源码分析,首先讲解一个接口,一个类的功能:①.接口InitializingBean接口的功能:这个接口专门为bean设计的,它只有一个方法.我们知道所有的bean都是由beanFactory来生成的,如果一个bean实现了该接口,在beanFactory为该bean装配好了所有的属性以后,在返回实际bean之前还会调用一次该接口的afterProp

SPRING中事务的配置

采用这种配置策略,完全可以避免增量式配置,所有的事务代理由系统自动创建.容器中的目标bean自动消失,避免需要使用嵌套bean来保证目标bean不可被访问.这 种配置方式依赖于Spring提供的bean后处理器,该后处理器用于为每个bean自动创建代理,此处的代理不仅可以是事务代理,也可以是任意的代理, 只需要有合适的拦截器即可.这些是AOP框架的概念,笔者在此处不对AOP进行深入介绍.读者只需了解这种事务代理的配置方式即可.下面是采用BeanNameAutoProxyCreator配置事务代理

Spring中的FactoryBean

从SessionFactory说起: 在使用SSH集成开发的时候,我们有时候会在applicationContext.xml中配置Hibernate的信息,下面是配置SessionFactory的一段示例代码: <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataS

spring中基础核心接口总结

spring中基础核心接口总结理解这几个接口,及其实现类就可以快速了解spring,具体的用法参考其他spring资料 1.BeanFactory最基础最核心的接口重要的实现类有:XmlBeanFactory,以及ApplicationContext接口下的类 2.Resource接口,可以通用地访问文件资源1)ClassPathResource:读取得形式为"classpath:ApplicationContext.xml"2)FileStstemResource:读取得形式为&qu

将hibernate.cfg.xml文件都放到spring中时报错

报错如下所示: 私以为是配置文件出现问题了. <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.

使用spring注解,注入sessionFactory类

简述 目前使用spring hibernate作为项目的框架,并且使用注解方式进行对象装载.在装载Dao对象的时候常常需要注入sessionFactory对象,通常的做法是Dao继承至HibernateDaoSuppor,t然后在Dao中添加setSuperSessionFactory 方法进行注入的,这几天网上又看到一种更好的方法,所以这里就把这两种方法都记录一下. 方法一(继承HibernateDaoSupport) 这个是比较常用的方法,看到很多文章中都使用这种方式. 前置条件: sess

spring中的AOP 以及各种通知

理解了前面动态代理对象的原理之后,其实还是有很多不足之处,因为如果在项目中有20多个类,每个类有100多个方法都需要判断是不是要开事务,那么方法调用那里会相当麻烦. spring中的AOP很好地解决了这个问题,通过 execution表达式 指定哪些包中的那些类 哪些方法 用到事务 execution(public * *(..))  所有的公共方法 execution(* set*(..))  以set开头的任意方法 execution(* com.xyz.service.AccountSer