zoukankan      html  css  js  c++  java
  • 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的实例

  • 相关阅读:
    分苹果
    马拉车算法(求最长回文子串)
    KMP
    字典树
    关于子类和父类中的this的用法
    最长上生子序列LIS
    sass
    黑马程序员----java基础笔记下(毕向东)
    DOM
    ajax教程
  • 原文地址:https://www.cnblogs.com/boblogsbo/p/5275349.html
Copyright © 2011-2022 走看看