通过调用静态工厂方法创建 Bean
调用静态工厂方法创建 Bean是将对象创建的过程封装到静态方法中. 当客户端需要对象时, 只需要简单地调用静态方法, 而不用关心创建对象的细节.
要声明通过静态方法创建的 Bean, 需要在 Bean 的 class 属性里指定拥有该工厂的方法的类, 同时在 factory-method 属性里指定工厂方法的名称. 最后, 使用 <constrctor-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
class: 静态工厂类
factroy-method: 静态工厂方法.
-->
<bean id="car" class="com.learn.spring.factory.StaticObjectFactory"
factory-method="getCar" >
<constructor-arg value="audi"></constructor-arg>
</bean>
</beans>
package com.learn.spring.factory;
import java.util.HashMap;
import java.util.Map;
import com.learn.spring.autowire.Car;
/**
* 获取Car对象的工厂.
* Car car = StaticObjectFactory.getCar("audi");
*/
public class StaticObjectFactory {
private static Map<String,Car> cars = new HashMap<String,Car>();
static{
cars.put("audi", new Car("Audi", 450000));
cars.put("bmw", new Car("bmw",500000));
}
/**
* 静态工厂方法
*/
public static 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 car =(Car) ctx.getBean("car");
System.out.println(car);
}
}