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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • css+div网页设计(一)–基础知识

    css+div网页设计(一)–基础知识

    2021年12月10日
  • 打开GTA 5竟要跑19.8亿次if语句!黑客嘲讽R星代码烂,修改后直接省70%加载时间

    打开GTA 5竟要跑19.8亿次if语句!黑客嘲讽R星代码烂,修改后直接省70%加载时间本文转载自量子位一支烟的功夫,GTA5联机版终于打开了。「7年了!GTA5联机版加载还是这么慢??」△PleasewaitforevertoplayReddit、Steam、HackerNews上,无数玩家吐槽抱怨……进游戏少则等5、6分钟,多则20分钟。终于,一个黑客大哥实在忍不了,用逆编译器逐条查看运行情况,终于找到原因。原来,R星(游戏开发商RockStar)写的代码太低效,加载时,一个if语句竟然循环了19.8亿次….幕后黑手:谁占用大量时间?加

  • 【OpenGrok代码搜索引擎】三、OpenGrok常用命令

    【OpenGrok代码搜索引擎】三、OpenGrok常用命令写在前面为了防止一些无法预料的情况发生,建议在完成代码项目索引创建后对索引生成器(indexer)生成的配置文件configuration.xml进行备份。一、免配置方法可以使用一个OpenGrokDocker容器,该容器包含了OpenGrok配置环境,但需要注意的是,该容器不适合大型的代码项目。详细参考链接如下:opengrok/dockeratmaster·oracle/opengrok·GitHubDockerHub二、常用命令2…

  • Fcoin交易所的危险游戏!韭菜请远离!

    币圈一天,人间一年!Fcoin再一次用币圈速度验证了上面这句话并非虚言。Fcoin上线半个月,平台交易量即雄霸全球数字货币榜首,远超币安、OKEx、火币等老牌交易所,成为宇宙第一数字货币交易所。与Fcoin交易量蹿升速度相当的,还有Fcoin的平台币FT,一个月上涨百倍!成为币圈人士口中争相传播的百倍币。一、并不新鲜的Fcoin“交易挖矿”Fcoin能在短时间崛起,主要依靠的是“交易挖矿”模…

  • java jce_了解Java JCE的加密

    java jce_了解Java JCE的加密阅读提示:Java密码扩展(TheJavaCryptographyExtension),是JDK1.4的一个重要部分,本文介绍JCE的安装和使用。首先演示如果安装配置JCE(静态安装),然后是如何在不安装的情况下使用JCE(动态安装)。最后,将演示怎么生成密钥和密码,及如果进行基本的加密、解密。Java密码扩展(TheJavaCryptographyExtension),是JDK1.4…

  • 小米骁龙855_小米商城抢购秒杀软件

    小米骁龙855_小米商城抢购秒杀软件每日的科技盘点,用一篇文章给你带来今天的大小科技事。今天的热点消息层出不穷,随我一起来了解一下吧。【小米11将在12月29日发布】《科创板日报》以及外媒GizmoChina在昨日表示,小米下一代旗舰手机小米11将于12月29日发布。此前各大博主也都表示小米11将在本月发售,这对于一款旗舰手机来说还是比较奇特的。从外观图片来看,小米11采用了蓝色渐变色后盖,后置摄像头布局为方形设计,带…

    2022年10月24日

发表回复

您的电子邮箱地址不会被公开。

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