Spring与Hibernate整合中,通过配置LocalSessionFactoryBean来得到SessionFactory

本文介绍了在Spring与Hibernate整合时,如何通过LocalSessionFactoryBean获取SessionFactory。由于SessionFactoryImpl没有注入数据源的setter方法,Spring提供了LocalSessionFactoryBean来实现依赖注入。LocalSessionFactoryBean实现了FactoryBean接口,Spring会在装配时调用其getObject()方法返回SessionFactory。若要获取LocalSessionFactoryBean实例,可在配置文件中使用'&'前缀。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习Spring的过程中,一直不理解为何需要用LocalSessionFactoryBean来得到SessionFactory,LocalSessionFactoryBean 本身不是一个session factory,但是spring会自动把对这个bean的引用替换成LocalSessionFactoryBean 里面的真正的session factory。

Hibernate提供的SessionFactory接口的实现类SessionFactoryImpl没有注入数据源的setter方法(上面的代码是直接把hibernate配置文件注入给了LocalSessionFactoryBean,也可以把一个数据源dataSource注入给它)所以为了完成spring的依赖注入,Spring提供了LocalSessionFactoryBean这个类.
现在我们有个这样的问题:

我们想要一个org.hibernate.SessionFactory类.而我们在Spring容器中确是一个LocalSessionFactoryBean类。

    publicclass LocalSessionFactoryBean implements FactoryBean, InitializingBean, DisposableBean {   
      
        private SessionFactory sessionFactory;   
      
        public Object getObject(); {   
            returnthis.sessionFactory;   
         }  
当引用这个LocalSessionFactoryBean 的时候,比如applicationContext.getBean("localSessionFactoryBean ")这样,spring返回的不是LocalSessionFactoryBean 本身,他会自动调用getObject()这个方法,把真正的session factory返回。用<ref bean="">这样引用也一样,得到的都是session factory而不是LocalSessionFactoryBean 。这里代码没贴全,有兴趣的话去看看源代码。

所以不需要再显式地创建一个session factory,直接引用LocalSessionFactoryBean 就可以了。

2.

LocalSessionFactoryBean实现了org.springframework.beans.factory.FactoryBean接 口, spring在装配的时候, 如果发现实现了org.springframework.beans.factory.FactoryBean接口, 就会使用FactoryBean#getObject() 方法返回的对象装配,具体的可以看下文档.

如果你想拿到LocalSessionFactoryBean实例, 在id前面加个'&'就可以了,在你的配置文件中BeanFactory.getBean('&sessionFactory')拿到的 就是LocalSessionFactoryBean的实例.



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值