Spring集成Hibernate 理解LocalSessionFactoryBean

转载 2013年12月02日 08:23:58

LocalSessionFactoryBean(org.springframework.orm.hibernate3.LocalSessionFactoryBean)是Spring和Hibernate集成的重要类。

配置如下:

<bean id="MySf" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">  
        <property name="dataSource" ref="dataSource"></property>   
       
        <property name="mappingResources">   
             <list>   
                  <value>org/hzy/entity/Dept.hbm.xml</value>   
            </list>   
        </property>   
        <property name="hibernateProperties">   
            <props>     
                <prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>    
                <prop key="hibernate.hbm2ddl.auto">update</prop>     
            <!--     <prop key="hibernate.current_session_context_class">thread</prop> -->  
                <prop key="hibernate.current_session_context_class">  
                    org.springframework.orm.hibernate3.SpringSessionContext  
                </prop>  
                <prop key="hibernate.show_sql">true</prop>     
                <prop key="hibernate.format_sql">true</prop>    
            </props>     
         </property>   
</bean>  

从上面的配置文件可以看出,配置文件中的sessionFactory按照道理说,应该是LocalSessionFactoryBean的实例,但是实际上却不是,而是SessionFactory的实例。

public class LocalSessionFactoryBean extends AbstractSessionFactoryBean implements BeanClassLoaderAware

public abstract class AbstractSessionFactoryBean  
        implements FactoryBean<SessionFactory>, InitializingBean, DisposableBean, PersistenceExceptionTranslator

从源码中,我们可以看出LocalSessionFactoryBean它继承了父类AbstractSessionFactoryBean,父类实现了FactoryBean<T>接口,并给了SessionFactory类型

Spring给我们提供了强大的接口FactoryBean<T>,该接口有三个方法(getObject(),getObjectType(),isSingleton()):
只要它的实现类实现了getObject()方法,Spring则返回getObject()返回出来的对象,当引用当引用这个LocalSessionFactoryBean的时候,比如applicationContext.getBean("MySf")这样,spring返回的不是LocalSessionFactoryBean本身,他的父类AbstractSessionFactoryBean会调用getObject()这个方法,把真正的sessionfactory返回。
例如:以前 类A_factory(id="a")——>getBean("a")得到一个new A_factory()对象,
现在则是getBean("a")得到new A_factory().getObject()。

例子:

package org.hzy.dao;  
  
import org.springframework.beans.factory.FactoryBean;  
/** 
 * TestBean继承了FactoryBean接口 
 * @author Administrator 
 * 
 */  
public class DeptFactory implements FactoryBean<Dept>{  
  
    public Dept getObject() throws Exception {  
        // TODO Auto-generated method stub  
        return new Dept(10);  
    }  
  
    public Class<?> getObjectType() {  
        // TODO Auto-generated method stub  
        return null;  
    }  
  
    public boolean isSingleton() {  
        // TODO Auto-generated method stub  
        return false;  
    }  
} 

配置:

<bean id="Dept" class="org.hzy.dao.DeptFactory"></bean>  

测试:

    public static void main(String[] args) {  
        ApplicationContext ctx=new ClassPathXmlApplicationContext("beans1.xml");  
//      DeptFactory d=ctx.getBean("Dept",DeptFactory.class);  
        Dept d=ctx.getBean("Dept",Dept.class);  
        System.out.println(d);  
    }  

注:上面的结果返回的是Dept类型,而不是DeptFactory类型,
由于DeptFactory实现了FactoryBean接口,把Dept类型传进去,当你向Spring要DeptFactory对象时,将会调用DeptFactory中的getObject()方法,所以返回
结果是Dept对象。(当你向Spring 要Dept类型,spring 还是同样返回通过getObject产生的对象),这里列举的是Dept类型,其它类型也是一样的


DeptFactory d=ctx.getBean("&Dept",DeptFactory.class);  
bean的id前加个&得到的就是DeptFactory类型,真正的类型。

相关文章推荐

Spring : 集成Hibernate 理解LocalSessionFactoryBean

1、LocalSessionFactoryBean的使用 LocalSessionFactoryBean(org.springframework.orm.hibernate4.LocalSession...

Spring集成Hibernate 理解LocalSessionFactoryBean

LocalSessionFactoryBean(org.springframework.orm.hibernate3.LocalSessionFactoryBean)是Spring和Hibernate...

spring 自动注入Hibernate中的SessionFactory 探索

之前用Spring的注解模式配置Hibernate的时候觉得很简单。 使用@autowire 自动注入 @Autowired private SessionFactory sessionFacto...
  • XRYMIBZ
  • XRYMIBZ
  • 2017年04月18日 12:29
  • 664

Spring与Hibernate整合时的核心类LocalSessionFactoryBean详解

在Spring与Hibernate整合核心类LocalSessionFactoryBean详解
  • canot
  • canot
  • 2016年01月13日 18:12
  • 4191

Spring整合Hibernate之AnnotationSessionFactoryBean与LocalSessionFactoryBean

Spring集成Hibernate由两种形式 1、继续使用Hibernate的映射文件*.hbm.xml 2、使用jpa形式的pojo对象, 去掉*.hbm.xml文件 一、继续使用Hiberna...

Spring+Hibernate集成后事务与Session的一些理解。

Spring的配置文件,在web.xml加载时,就按照类得映射给动态注入了,而且对于其中需要加载的hibernate配置文件,也只加载一次,就把sessionFactory注入给对象中。然后在类中如果...

Spring的LocalSessionFactoryBean类(转)

在Struts2中集成了Spring之后再集成Hibernate就非常容易了,在这里我们需要用到Spring提供的ORM模块。通过这个模块Spring提供了对Hibernate、JDO、OJB和iBa...

spring+hibernate+Struts2集成

  • 2015年08月29日 00:35
  • 19.39MB
  • 下载

jsf+hibernate+spring集成案例

  • 2012年06月06日 21:22
  • 1.12MB
  • 下载

通过注解的方式集成Spring 4 MVC+Hibernate 4+MySQL+Maven,开发项目样例

原文网址 在这个指导中,我们将用基于Spring 的注解的配置来集成Hibernate。我们将开发一个简单的网页,这个网页包含一个表单,接收用户的输入。以实现简单的增删改查。使用hibernate将...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring集成Hibernate 理解LocalSessionFactoryBean
举报原因:
原因补充:

(最多只允许输入30个字)