使用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集成

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值