使用工厂方法创建管理bean

第一部分: 静态工厂

  1. 工厂类写法:

public class AirPlaneStaticFactory {
	
	
	/**
	 * 静态工厂
	 * @param name
	 * @return
	 */
	public static Airplane getAirPlane(String name) {
		Airplane airplane = new Airplane();
		airplane.setFjs("副驾驶");
		airplane.setName(name);
		airplane.setNum(1001001);
		return airplane;
	}

}

  1. xml配置注册bean
<!-- 使用工厂管理bean-satic静态管理 -->
<bean name="airFactory01" class="factory.AirPlaneStaticFactory" 
	factory-method="getAirPlane">
	<constructor-arg name="name" value="和风号"></constructor-arg>
</bean>
  1. ioc容器取出bean
Object object = context.getBean("airFactory01"); 		//注意此处的参数,使用的是xml中工厂类注册的名

返回值是工厂类所管理的bean,即Airplane对象

第二部分: 实例工厂

  1. 工厂类写法
public class AirPlaneInstanceFactory {
	/**
	 * 实例工厂
	 * @param name
	 * @return
	 */
	public Airplane getAirPlane(String name) {
		Airplane airplane = new Airplane();
		airplane.setFjs("我是副驾驶");
		airplane.setName(name);
		airplane.setNum(2089289);
		return airplane;
	}

}
  1. xml中注册

此处注意点:1)要注册一个工厂类,2)要注册一个airplane类,3)要在airplane bean中指定所用到的工厂类和工厂方法,以及需要的参数,并且在之后的ioc容器创建的时候使用的名称是airplen bean的注册名

<!-- 使用工厂管理bean-实例管理 -->
<bean id="airFactory02" class="factory.AirPlaneInstanceFactory" >
	
</bean>
<bean id="airPlane02" class="entity.Airplane" 
	factory-bean="airFactory02" factory-method="getAirPlane">
	<constructor-arg name="name" value="复兴号"></constructor-arg>
</bean>
  1. ioc容器取出bean
Object object = context.getBean("airPlane02");	//此处的参数不能写工厂类的注册名,要使用bean类的注册名

第三部分: FactoryBean接口

FactoryBean是Spring官方提供的接口,实现该接口,则无需进行复杂的配置,只需要在xml中注册该工厂类即可

  1. xml注册
<bean id="facrorybean" class="factory.MyFactoryBean"></bean>
  1. MyFactoryBean.java
public class MyFactoryBean implements FactoryBean<Book> {

	@Override
	public Book getObject() throws Exception {
		Book book = new Book();
		book.setAuthor("曹雪晴");
		book.setName("红楼梦");
		book.setPrice(100);
		System.out.println("MyFactoryBean创建了对象");
		return book;
	}

	@Override
	public Class<?> getObjectType() {
		return Book.class;
	}

}
  1. ioc容器取出
Object object = context.getBean("facrorybean");

总结

spring的bean注册,由每一个都需要单独在xml中注册,升级成可以使用工厂类批量,统一管理注册,再到FactoryBean,工厂bean注册,简化了效率,但是本质都是bean的配置,再底层则是反射的原理