spring中的FactoryBean代码示例
作者:zhangjk1993 发布时间:2023-11-11 18:37:20
上篇文章中我们介绍了浅谈Spring的两种配置容器,接下来我们就了解下spring中的FactoryBean的相关内容,具体如下。
从SessionFactory说起:
在使用SSH集成开发的时候,我们有时候会在applicationContext.xml中配置Hibernate的信息,下面是配置SessionFactory的一段示例代码:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="hibernateProperties">
<props>
<!-- 是否自动更新表项目 -->
<prop key="hibernate.hbm2ddl.auto">update</prop>
<!-- 数据库使用的方言 -->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
<!-- 是否显示产生的sql语句 -->
<prop key="hibernate.show_sql">true</prop>
<!-- 是否显示格式化产生的sql语句 -->
<prop key="hibernate.format_sql">true</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>bean/User.hbm.xml</value>
</list>
</property>
</bean>
下面我们在程序中取一下sessionFacroty,然后打印出出它的类型
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
System.out.println(applicationContext.getBean("sessionFactory").getClass().getName());
我们会发现它的类型为 org.hibernate.internal.SessionFactoryImpl,而不是org.springframework.orm.hibernate4.LocalSessionFactoryBean,这是为什么呢?
其实在Spring中为我们提供了两种类型的bean,一种就是普通的bean,我们通过getBean(id)方法获得是该bean的实际类型,另外还有一种bean是FactoryBean,也就是工厂bean,我们通过getBean(id)获得是该工厂所产生的Bean的实例,而不是该FactoryBean的实例。
那么如何实现一个FactoryBean呢,Spring为我们提供了一个FactotyBean的接口,只要实现了这个接口,我们创建的bean就是FactoryBean,下面是一个示例
package factory;
import org.springframework.beans.factory.FactoryBean;
import bean.User;
public class UserFactory implements FactoryBean<User>{
@Override
public User getObject() throws Exception {
return new User();
}
@Override
public Class<?> getObjectType() {
return User.class;
}
/**
* 工厂所管理的对象是否为单例的
* 即如果该方法返回true,那么通过getObject()方法返回的对象都是同一个对象
*/
@Override
public boolean isSingleton() {
return true;
}
}
在applicationContext.xml中配置一下
<bean id="userFactory" class="factory.UserFactory" />
然后我们再将userFactory打印出来,得到的对象为bean.User类型。
ok,那么如何才能得到UserFactory的实例,而不是User对象的实例,我们只需要在取对象时加上一个"&"符号,如下所示
UserFactory userFactory = (UserFactory) applicationContext.getBean("&userFactory");
来源:http://blog.csdn.net/zhangjk1993/article/details/40017583


猜你喜欢
- 最近部分采用了TDD的方法来开发一个模块,小有收获特此总结一下:1. TDD的基本原则TDD的最核心思想就是先明确需求,且用代码的方式量化,
- 方式一:通过java.net.InetAddress类获取public void test1() { try { InetAdd
- 传统界面的布局方式总是行列分明、坐落有序的,这种布局已是司空见惯,在不知不觉中大家都已经对它产生了审美疲劳。这个时候瀑布流布局的出现,就给人
- 如何将Object类型转换为int类型Object object = null;try{ Integer.pars
- 先上效果图: 工具类在解析的过程中,我们会和byte做各种运算,所以我定义了一个byte工具类ByteUtils:using Sy
- 答案是能!松哥之前写过类似的文章,但是主要是讲了用法,今天我们来看看原理!本文基于当前 Spring Security 5.3.4 来分析,
- 一、简介用法ScrollView大致相同二、方法1)HorizontalScrollView水平滚动控件使用方法1、在layout布局文件的
- 实现从数据库中动态获取对应的List集合,并在Easyui的combobox中显示出来。实现的效果如下:1、数据库的表设计如图所示2、数据库
- spring配置不扫描service层原因我将contoller给springmvc进行扫描,然后其余所有交给spring扫描然后发现ser
- 今天在做一个联系人管理的C#设计时,遇到了这个问题,我需要将父窗体中的textBox中的值传到子窗体并进行数据库查询操作,我用了new 父窗
- SQL 映射XML 文件是所有sql语句放置的地方。需要定义一个workspace,一般定义为对应的接口类的路径。写好SQL语句映射文件后,
- 循环队列结构队列特点队列为一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,
- 本文实例分析了java中transient关键字用法。分享给大家供大家参考。具体分析如下:java有个特点就是序列化,简单地来说就是可以将这
- 由于GitHub上面的zxing功能太多,有的用不到,我就抽取了重要的出来使用,这个可以生成二维码,扫描二维码和相册中的二维码Demo效果:
- 简单的IM聊天程序由于项目需要做一个基于XMPP协议的Android通讯软件。故开始研究XMPP。XMPP协议采用的是客户端-服务器架构,所
- 本文实例讲述了C#使用HtmlAgilityPack抓取糗事百科内容的方法。分享给大家供大家参考。具体实现方法如下:Console.Writ
- 本文实例为大家分享了java实现简单扫雷游戏的具体代码,供大家参考,具体内容如下package com.test.swing;import
- 前面做了app微信支付的回调处理,现在需要做微信公众号的支付,花了一天多时间,终于折腾出来了!鉴于坑爹的微信官方没有提供Java版的demo
- 我们在j2ee当中,连接数据库的时候经常会用到properties配置文件,我们原来在eclipse或者myeclipse当中会在src文件
- 一、java内存区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和