实例工厂配置bean

通过调用实例工厂方法创建 Bean

实例工厂方法: 将对象的创建过程封装到另外一个对象实例的方法里. 当客户端需要请求对象时, 只需要简单的调用该实例方法而不需要关心对象的创建细节.

要声明通过实例工厂方法创建的 Bean

在 bean 的 factory-bean 属性里指定拥有该工厂方法的 Bean

在 factory-method 属性里指定该工厂方法的名称

使用 construtor-arg 元素为工厂方法传递方法参数

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans.xsd">		 
	 <!-- 实例工厂配置bean
	 	factroy-bean: 指定工厂bean
	 	factroy-method:指定实例工厂方法.
	  -->
	 <bean id="iof" class="com.learn.spring.factory.InstanceObjectFactory"></bean>
	 <bean id="car1" factory-bean="iof" factory-method="getCar">
	 	<constructor-arg value="bmw"></constructor-arg>
	 </bean> 
	
</beans>
package com.learn.spring.factory;

import java.util.HashMap;
import java.util.Map;

import com.learn.spring.autowire.Car;

/**
 * 获取Car对象的工厂.
 * InstanceObjectFactory  iof = new InstanceObjectFactory();
 * 
 * Car car = iof.getCar("bmw");
 */
public  class InstanceObjectFactory {
	
	private  Map<String,Car> cars = new HashMap<String,Car>();
	
	public InstanceObjectFactory(){
		cars.put("audi", new Car("Audi", 450000));
		cars.put("bmw", new Car("bmw",550000));
	}
	
	/**
	 * 实例工厂方法
	 */
	public  Car getCar(String carName){
		return cars.get(carName);
	}
}
package com.learn.spring.factory;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.learn.spring.autowire.Car;

public class Main {
	public static void main(String[] args) {
		ClassPathXmlApplicationContext ctx = 
				new ClassPathXmlApplicationContext("spring-factory.xml");
		Car car1 =(Car) ctx.getBean("car1");
		System.out.println(car1);
	}
}
发布了2545 篇原创文章 · 获赞 66 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/Leon_Jinhai_Sun/article/details/105546497