Spring框架通过工厂创建Bean的三种方式实现

所属分类: 软件编程 / java 阅读数: 64
收藏 0 赞 0 分享

工厂模式

Spring中bean的创建,默认是框架利用反射new出来的bean实例。有时候也会有一些复杂的情况。

假设有一个飞机,属性如下,现在需要造很多同型号的飞机,那么唯一需要改变的属性只有DriverName(机长姓名),此时可以使用工厂模式帮我们创建对象,有一个专门帮我们创建对象的类帮我们创建对象,这个类就叫工厂。

public class AirPlane {
	private String DriverName;// 机长姓名
	private String AirPlaneName;// 飞机名字
	private String longth;// 飞机长度
	private Integer num;// 载客量
	//省略getter与setter方法
}

静态工厂:工厂本身不用创建对象,通过静态方法调用。
实例工厂:工厂本身需要创建对象,需要先new一个工厂实例。

1.使用静态工厂创建bean

静态工厂:

package com.gql.factory;
import com.gql.bean.AirPlane;
/**
 * 静态工厂
 * 
 * @author guoqianliang
 */
public class AirPlaneStaticFactory {
	public static AirPlane getAirPlane(String drivername) {
		System.out.println("静态工厂造飞机...");
		AirPlane airplan = new AirPlane();
		airplan.setDriverName(drivername);
		airplan.setAirPlaneName("歼20");
		airplan.setLongth(20);
		airplan.setNum(1);
		return airplan;
	}
}

在xml中注册静态工厂:

<!-- 静态工厂: factory-method="getAirPlane"指定哪个方法是工厂方法-->
	<bean id="airPlan1" class="com.gql.factory.AirPlaneStaticFactory" factory-method="getAirPlane">
		<constructor-arg value="舒克"></constructor-arg>
	</bean>

测试:

@Test
	public void test07() {
		System.out.println("容器启动完成");
		AirPlane bean = (AirPlane) ioc.getBean("airPlan1");
		System.out.println("打印飞机属性:" + bean);
	}

2.使用实例工厂创建bean

实例工厂:

package com.gql.factory;
import com.gql.bean.AirPlane;
/**
 * 实例工厂
 * @author guoqianliang
 */
public class AirPlaneInstanceFactory {
	public AirPlane getAirPlane(String drivername) {
		System.out.println("实例工厂造飞机...");
		AirPlane airplan = new AirPlane();
		airplan.setDriverName(drivername);
		airplan.setAirPlaneName("歼20");
		airplan.setLongth(20);
		airplan.setNum(1);
		return airplan;
	}
}

在xml中注册实例工厂:

  • factory-bean=“InstanceFactory” :指定使用哪个工厂实例。
  • factory-method=“getAirPlane”:使用哪个工厂方法。
<bean id="InstanceFactory"
		class="com.gql.factory.AirPlaneInstanceFactory"></bean>
	<bean id="airPlan2" class="com.gql.bean.AirPlane"
		factory-bean="InstanceFactory" factory-method="getAirPlane">
		<constructor-arg value="舒克二号"></constructor-arg>
	</bean>

测试:

	@Test
	public void test08() {
		System.out.println("容器启动完成");
		AirPlane bean = (AirPlane) ioc.getBean("airPlan2");
		System.out.println("打印飞机属性:" + bean);
	}

3.实现FactoryBean工厂创建Bean

ioc容器启动的时候不会创建实例(无论是单实例还是多实例),获取的时候才创建实例对象。

实现FactoryBean接口:

package com.gql.factory;
import org.springframework.beans.factory.FactoryBean;
import com.gql.bean.Book;
public class MyFactoryBean implements FactoryBean<Book> {
	/**
	 * 返回创建的对象
	 */
	@Override
	public Book getObject() throws Exception {
		System.out.println("MyFactoryBean创建对象...");
		Book book = new Book();
		book.setBookName("红楼梦");
		book.setAuthor("曹雪芹");
		return book;
	}

	/**
	 * 返回创建的对象的类型
	 */
	@Override
	public Class<?> getObjectType() {
		// TODO Auto-generated method stub
		return Book.class;
	}

	/**
	 * 是单例? true:是 false:不是
	 */
	@Override
	public boolean isSingleton() {
		// TODO Auto-generated method stub
		return true;
	}
}

在xml中注册:

<!-- 使用FactoryBean -->
<bean id="myFactoryBean" class="com.gql.factory.MyFactoryBean"></bean>

测试:

@Test
	public void test09() {
		System.out.println("容器启动完成");
		Object bean = ioc.getBean("myFactoryBean");
		System.out.println("打印属性:" + bean);
	}

到此这篇关于Spring框架通过工厂创建Bean的三种方式实现的文章就介绍到这了,更多相关Spring 工厂创建Bean内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

更多精彩内容其他人还在看

JavaWeb项目部署到服务器详细步骤详解

这篇文章主要介绍了JavaWeb项目如何部署到服务器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

IDEA基于支付宝小程序搭建springboot项目的详细步骤

这篇文章主要介绍了IDEA基于支付宝小程序搭建springboot项目的详细步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解SpringBoot应用服务启动与安全终止

这篇文章主要介绍了SpringBoot应用服务启动与安全终止,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Boot启动及退出加载项的方法

这篇文章主要介绍了Spring Boot启动及退出加载项的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Data Jpa 自动生成表结构的方法示例

这篇文章主要介绍了Spring Data Jpa 自动生成表结构的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

IDEA中osgi的开发应用指南详解

这篇文章主要介绍了IDEA中osgi的开发应用指南详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解用maven将dubbo工程打成jar包运行

这篇文章主要介绍了详解用maven将dubbo工程打成jar包运行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解Java合并数组的两种实现方式

这篇文章主要介绍了Java合并数组的两种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

使用Jenkins Pipeline自动化构建发布Java项目的方法

这篇文章主要介绍了使用Jenkins Pipeline自动化构建发布Java项目的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

使用Maven配置Spring的方法步骤

这篇文章主要介绍了使用Maven配置Spring的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多