通过工厂方法配置Bean
Posted zhzcode
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过工厂方法配置Bean相关的知识,希望对你有一定的参考价值。
【工厂方法(静态工厂方法&实例工厂方法)】
【通过调用静态工厂方法创建Bean】
1.调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中。当客户端需要对象时,只需要简单地调用静态方法,而不用关心创建对象的细节。
2.要声明通过静态方法创建的Bean,需要在Bean的class属性里指定拥有该工厂的方法的类,同时在factory-method属性里指定工厂方法的名称,最后,使用<construtor-arg>元素为该方法传递方法参数。
beans-factory.xml:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation="http://www.springframework.org/schema/beans 5 http://www.springframework.org/schema/beans/spring-beans.xsd"> 6 7 <!-- 通过静态工厂方法来配置Bean,注意不是配置静态工厂方法实例,而是配置Bean实例 --> 8 <!-- 9 class属性:指向静态工厂方法的全类名 10 factory-method:指向静态工厂方法的名字 11 constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数 12 --> 13 <bean id="car1" class="com.hk.beans.factory.StaticCarFactory" 14 factory-method="getCar"> 15 <constructor-arg value="Audi"></constructor-arg> 16 </bean> 17 </beans>
StaticCarFactory.java:
1 package com.hk.beans.factory; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 /** 7 * 静态工厂方法:直接调用某一个类的静态方法就可以返回Bean的实例 8 * @author 猩生柯北 9 * 10 */ 11 public class StaticCarFactory { 12 13 private static Map<String,Car> cars = new HashMap<String,Car>(); 14 15 static{ 16 cars.put("Audi",new Car("Audi",300000)); 17 cars.put("Ford",new Car("Ford",500000)); 18 } 19 20 //静态工厂方法 21 public static Car getCar(String name){ 22 return cars.get(name); 23 } 24 25 }
运行结果:
【通过调用实例工厂方法创建Bean】
1.实例工厂方法:将对象的创建过程封装到另外一个对象实例的方法里。当客户端需要请求对象时,只需要简单的调用该实例方法而不需要关心对象的创建细节。
2.要声明通过实例工厂方法创建的Bean
--在bean的factory-bean属性里指定拥有该工厂方法的Bean
--在factory-method属性里指定该工厂方法的名称
--使用construtor-arg元素为工厂方法传递方法参数
beans-factory.xml:
1 <!-- 配置工厂的实例 --> 2 <bean id="carFactory" class="com.hk.beans.factory.InstanceCarFactory"></bean> 3 <!-- 通过实例工厂方法来配置bean --> 4 <!-- 5 factory-bean属性:指向实例工厂方法的bean 6 factory-method:指向静态工厂方法的名字 7 constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数 8 --> 9 <bean id="car2" factory-bean="carFactory" factory-method="getCar"> 10 <constructor-arg value="ford"></constructor-arg> 11 </bean>
InstanceCarFactory.java:
1 package com.hk.beans.factory; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 /** 6 * 实例工厂方法:实例工厂的方法。即先需要创建工厂本身,再调用工厂的实例方法来返回bean的实例 7 */ 8 public class InstanceCarFactory { 9 10 private Map<String,Car> cars = null; 11 12 public InstanceCarFactory(){ 13 cars = new HashMap<String,Car>(); 14 cars.put("audi",new Car("audi",300000)); 15 cars.put("ford",new Car("ford",500000)); 16 } 17 18 public Car getCar(String brand){ 19 return cars.get(brand); 20 } 21 }
运行结果:
以上是关于通过工厂方法配置Bean的主要内容,如果未能解决你的问题,请参考以下文章
Spring 通过工厂方法(Factory Method)来配置bean