`
sungang_1120
  • 浏览: 310117 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类

使用Spring的FactoryBean用法

阅读更多

 

前提在使用Spring集成中,我们可以使用Spring提供的FactoryBean接口来实现Spring容器通过工厂来实例化对象。

 

Spring规范的标准Bean工厂接口。实现了FactoryBean接口的实例只能作为工厂类存在:

1,

public T getObject() throws Exception {}

 2,

public Class<?> getObjectType() {}

 3,

public boolean isSingleton() {}

 

下面是代码配置:

首先我们要实例化的对象:

package com.sg.spring.study.day1.create;

public class Session {
	public void save() {
		System.out.println("save session ....");
	}
}

 

需要产生实例的工厂:

package com.sg.spring.study.day1.create;

import org.springframework.beans.factory.FactoryBean;

public class SessionFactoryBean implements FactoryBean<Session> {

	//创建实例
	@Override
	public Session getObject() throws Exception {
		System.out.println("创建session的逻辑...");
		return new Session();
	}

	@Override
	public Class<?> getObjectType() {
		return Session.class;
	}
	
	//判断实例化时  是否使用单例模式
	
	@Override
	public boolean isSingleton() {
		return true;
	}

}

 

spring配置文件如下:

<bean id="session" class="com.sg.spring.study.day1.create.SessionFactoryBean"/>

 

测试 :

@Test
	public void test1() {
//		Resource resource = new ClassPathResource("application.xml");
//		BeanFactory factory = new XmlBeanFactory(resource);
		
		ApplicationContext ctx = new ClassPathXmlApplicationContext("application.xml");
		Session session = ctx.getBean("session", Session.class);
		
		System.out.println(session.getClass());
		//打印如下:
			//创建session的逻辑...
			//class com.sg.spring.study.day1.create.Session
		//session.save();
	}

 

 

我们还可以直接获取工厂类型:

@Test
	public void test1() {
//		Resource resource = new ClassPathResource("application.xml");
//		BeanFactory factory = new XmlBeanFactory(resource);
		
		ApplicationContext ctx = new ClassPathXmlApplicationContext("application.xml");
		Object obj = ctx.getBean("&session");
		
		System.out.println(obj.getClass());
		//打印如下:		
			//class com.sg.spring.study.day1.create.SessionFactoryBean
		//session.save();
	}

 

注意:

        1,我们在配置文件中配置的是factory,但得到的是工厂产生的bean的实例。

         2,通过session得到的是bean的实例,通过&session得到的是工厂的实例。

 

在spring中,很多对象都是使用了FactoryBean的方式来得到bean的实例,比如:Session,Transcation,EntityManager等。

 

使用FactoryBean的好处:我们只需在配置文件中通过一条配置就可以得到工厂方法实例和其生产bean的实例,而不需要像实例bean工厂那样配置两个bean。另外,bean工厂创键的bena实例的生命周期范围就交给了spring去管理,而不需要我们的factory自己来实现,

 

缺点:和Spring API集成

 

 

分享到:
评论

相关推荐

    spring的FactoryBean增强我们的目标对象.rar

    通过FactoryBean在获取目标类的时间我们将增强的代理类给返回,使得我们调用方法的时间使用的代理类来增强,如果需要继续使用未代理的对象,则直接@Autowired 注入使用.

    spring中FactoryBean中的getObject()方法实例解析

    主要介绍了spring中FactoryBean中的getObject()方法实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

    spring的详细介绍

    Spring介绍 1. Spring 2. 使用spring的主要目的 3. Spring的模块 Ejb容器(以前是) Ioc容器(现在的控制权) 控制反转Ioc(Invertion of control)依赖注入(Dependency Injection) ...13. 接口FactoryBean的使用

    Spring-Reference_zh_CN(Spring中文参考手册)

    3.7.3. 使用FactoryBean定制实例化逻辑 3.8. ApplicationContext 3.8.1. 利用MessageSource实现国际化 3.8.2. 事件 3.8.3. 底层资源的访问 3.8.4. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕的...

    Spring 2.0 开发参考手册

    3.7.3. 使用FactoryBean定制实例化逻辑 3.8. ApplicationContext 3.8.1. 利用MessageSource实现国际化 3.8.2. 事件 3.8.3. 底层资源的访问 3.8.4. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕...

    spring:这是Spring框架研究

    spring This is spring framework study ...八、使用spring FactoryBean技术模拟mybatis MapperScan注解 https://github.com/AvengerEug/spring/tree/develop/implement-mapperscan 九、mybatis源码学习 ...

    尚硅谷佟刚Spring4代码及PPT.rar

    在 Eclipse 中安装 SpringIDE 插件、IOC & DI、在 Spring 中配置 Bean、自动装配、Bean 之间的关系(依赖、继承)、Bean 的作用域、使用外部属性文件、SpEL、管理 Bean 的生命周期、通过工厂方法配置 Bean、通过 ...

    Spring中文帮助文档

    3.7.3. 使用FactoryBean定制实例化逻辑 3.8. The ApplicationContext 3.8.1. BeanFactory 还是 ApplicationContext? 3.8.2. 利用MessageSource实现国际化 3.8.3. 事件 3.8.4. 底层资源的访问 3.8.5. ...

    Spring.3.x企业应用开发实战(完整版).part2

    经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...

    Spring API

    3.7.3. 使用FactoryBean定制实例化逻辑 3.8. The ApplicationContext 3.8.1. BeanFactory 还是 ApplicationContext? 3.8.2. 利用MessageSource实现国际化 3.8.3. 事件 3.8.4. 底层资源的访问 3.8.5. ...

    spring chm文档

    3.7.3. 使用FactoryBean定制实例化逻辑 3.8. ApplicationContext 3.8.1. 利用MessageSource实现国际化 3.8.2. 事件 3.8.3. 底层资源的访问 3.8.4. ApplicationContext在WEB应用中的实例化 3.9. 粘合代码和可怕...

    Spring攻略(第二版 中文高清版).part1

    1.7 使用Spring的FactoryBean创建Bean 27 1.7.1 问题 27 1.7.2 解决方案 27 1.7.3 工作原理 27 1.8 使用工厂Bean和Utility Schema定义集合 29 1.8.1 问题 29 1.8.2 解决方案 29 1.8.3 工作原理 29 ...

    Spring攻略(第二版 中文高清版).part2

    1.7 使用Spring的FactoryBean创建Bean 27 1.7.1 问题 27 1.7.2 解决方案 27 1.7.3 工作原理 27 1.8 使用工厂Bean和Utility Schema定义集合 29 1.8.1 问题 29 1.8.2 解决方案 29 1.8.3 工作原理 29 ...

    Spring3.x企业应用开发实战(完整版) part1

    经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。...

    Spring 3 Reference中文

    4.8.3 使用FactoryBean 来自定义实例化逻辑. 84 4.9 基于注解的容器配置. 85 4.9.1 @Required.. 86 4.9.2 @Autowired和@Inject.. 86 4.9.3 使用限定符来微调基于注解的自动装配 89 4.9.4 ...

    spring源码解决

    //这里是对FactoryBean的转义定义,因为如果使用bean的名字检索FactoryBean得到的对象是工厂生成的对象, //如果需要得到工厂本身,需要转义 String FACTORY_BEAN_PREFIX = "&"; //这里根据bean的名字,在IOC容器中...

    spring aop 实现源代码--xml and annotation(带lib包)

    下面通过例子来说明Before Advice的使用方法。首先定义目标对象所要实现的接口: java 代码 1. package com.savage.aop 2. 3. public interface MessageSender { 4. void send(String message); 5. } 接着...

    Spring面试题

    FactoryBean 接口为使用 Spring 框架构建的应用程序添加了一个间接的级别。 IOC 示例 理解控制反转最简单的方式就是看它的实际应用。在对由三部分组成的 Spring 系列 的第 1 部分进行总结时,我使用了一个示例,...

    spring3.1中文参考文档

    spring3.1中文参考文档,南磊翻译,现在有4章,目录如下: 第一部分 Spring framework概述.......................................................................................................................

    spring学习资料

    3. //这里是对FactoryBean的转义定义,因为如果使用bean的名字检索FactoryBean得到的对象是工厂生成的对象, 4. //如果需要得到工厂本身,需要转义 5. String FACTORY_BEAN_PREFIX = "&"; 6. 7. //这里根据...

Global site tag (gtag.js) - Google Analytics