Spring集成Hibernate 理解LocalSessionFactoryBean[通俗易懂]

Spring集成Hibernate 理解LocalSessionFactoryBean[通俗易懂]随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)、博主微信(guyun297890152)、QQ技术交流群(183198395)。from:https://blog.csdn.net/leroy008/article/details/7704601LocalSessionFactoryBean(org.springframework.or…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

随时随地阅读更多技术实战干货,获取项目源码、学习资料,请关注源代码社区公众号(ydmsq666)

Spring集成Hibernate 理解LocalSessionFactoryBean[通俗易懂]

from:Spring集成Hibernate 理解LocalSessionFactoryBean_洋洋的专栏-CSDN博客

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类型,真正的类型

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196428.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Pyhton Cookbook 学习笔记 ch9_02 元编程[通俗易懂]

    Pyhton Cookbook 学习笔记 ch9_02 元编程[通俗易懂]【传送门】9.8将装饰器定义为类的一部分问题:想在类中定义装饰器,并作用在其他的函数上方案:在类中定义装饰器首先要确定它的使用方法,是作为一个实例方法还是作为一个类方法fromfunctoolsimportwrapsclassA:#作为一个实例方法defdecorator1(self,func):@wraps(func)…

    2022年6月3日
    33
  • 送你一张图,教你如何docker卸载redis,请收好「建议收藏」

    送你一张图,教你如何docker卸载redis,请收好「建议收藏」一张图,告诉你怎么操作。嘿嘿❤如果文章对您有所帮助,就在文章的右上角或者文章的末尾点个赞吧!(づ ̄3 ̄)づ❤如果喜欢大白兔分享的文章,就给大白兔点个关注吧!(๑′ᴗ‵๑)づ╭❤~❤对文章有任何问题欢迎小伙伴们下方留言或者入群探讨【群号:708072830】❤鉴于个人经验有限,所有观点及技术研点,如有异议,请直接回复讨论(请勿发表攻击言)…

    2025年10月2日
    3
  • RabbitMQ入门篇[通俗易懂]

    文章目录前言MQ的基本概念MQ的优势MQ的劣势常见的MQ产品RabbitMQRabbitMQ简介RabbitMQ中的相关概念:RabbitMQ工作模式Workqueues工作队列模式Pub/Sub订阅模式Routing路由模式Topics通配符模式工作模式总结消息确认生产者前言记录RabbitMQMQ的基本概念MQ全称MessageQueue(消息队列),是在消息的传输过程中保存消息的容器。多用于分布式系统之间进行通信MQ的优势应用解耦提高系统容错性和可维

    2022年4月8日
    57
  • VUE组件封装_vue使用组件

    VUE组件封装_vue使用组件什么是组件化:组件化就是将一个页面拆分成一个个小的功能模块,每个功能模块完成属于自己这部分独立的功能,使得整个页面的管理和维护变得非常容易。Vue组件化思想 组件化是Vue中的重要思想,当我们对vue的基本知识有了一定的基础就要开始封装组件了 它提供了一种抽象,让我们可以开发出一个个独立可复用的小组件来构造我们的应用。组件树。组件化思想的应用 1.在项目中充分利用组件化的思想 2.尽可能的将也页面拆分成一个个小的可复用的组件 3.好处:代码更加方便组织和管理,扩展性也更强一.注

    2022年9月23日
    2
  • TypeScript–es5中的类,继承,静态方法

    TypeScript–es5中的类,继承,静态方法

    2021年6月30日
    104
  • hsql大全[通俗易懂]

    hsql大全[通俗易懂]HQL:HibernateQueryLanguageHQL是完全面向对象的查询语言,因此可以支持继承和多态等特征。HQL查询依赖于Query类,每个Query实例对应一个查询对象,使用HQL查询按如下步骤进行:(1)获取HibernateSession对象;(2)编写HQL语句;(3)以HQL语句作为参数,调用Session的createQuery方法创建查询对象;(4)如果HQL语句…

    2022年9月22日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号