博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Spring的FactoryBean用法
阅读量:4151 次
发布时间:2019-05-25

本文共 2039 字,大约阅读时间需要 6 分钟。

 

前提在使用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
{ //创建实例 @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配置文件如下:

 

测试 :

@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集成

 

 

转载地址:http://dslti.baihongyu.com/

你可能感兴趣的文章
Qt文件夹选择对话框
查看>>
DeepLearning tutorial(7)深度学习框架Keras的使用-进阶
查看>>
人脸识别(OpenCV+Python)
查看>>
6个强大的AngularJS扩展应用
查看>>
第三方SDK:讯飞语音听写
查看>>
第三方SDK:JPush SDK Eclipse
查看>>
第三方开源库:imageLoader的使用
查看>>
自定义控件:飞入飞出的效果
查看>>
自定义控件:动态获取控件的高
查看>>
第三方开源库:nineoldandroid:ValueAnimator 动态设置textview的高
查看>>
第三方SDK:百度地图SDK的使用
查看>>
Android studio_迁移Eclipse项目到Android studio
查看>>
JavaScript setTimeout() clearTimeout() 方法
查看>>
CSS border 属性及用border画各种图形
查看>>
转载知乎-前端汇总资源
查看>>
JavaScript substr() 方法
查看>>
JavaScript slice() 方法
查看>>
JavaScript substring() 方法
查看>>
HTML 5 新的表单元素 datalist keygen output
查看>>
(转载)正确理解cookie和session机制原理
查看>>