天天看點

spring基礎知識 (12):工廠方法配置bean

靜态工廠方法配置bean

  • 配置一個靜态工廠方法
package com.spring.factory;

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

public class CarFactory {

    private static Map<String,Car> map = new HashMap<String,Car>();

    static{
        map.put("Audi", new Car("Audi",));
        map.put("Ford", new Car("Ford",));
    }

    public static Car getCar(String brand){
        return map.get(brand);
    }

}
           
  • 在配置檔案中配置bean:
<bean id="car1" class="com.spring.factory.CarFactory" factory-method="getCar">
    <constructor-arg value="Ford"></constructor-arg>
</bean>
           
通過靜态工程方法建立bean,使用factory-method指定建立執行個體的方法,constructor-arg為方法傳參。
  • 測試類:
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-factory.xml");
Car car1 = (Car) ctx.getBean("car1");
System.out.println(car1);
           
  • 結果:
    spring基礎知識 (12):工廠方法配置bean
  • 調用靜态工廠方法建立 Bean是将對象建立的過程封裝到靜态方法中. 當用戶端需要對象時, 隻需要簡單地調用靜态方法, 而不同關心建立對象的細節.
  • 要聲明通過靜态方法建立的 Bean, 需要在 Bean 的 class 屬性裡指定擁有該工廠的方法的類, 同時在 factory-method 屬性裡指定工廠方法的名稱. 最後, 使用

    <constrctor-arg>

    元素為該方法傳遞方法參數.

執行個體工廠方法配置bean

将對象的建立過程封裝到另外一個對象執行個體的方法裡. 當用戶端需要請求對象時, 隻需要簡單的調用該執行個體方法而不需要關心對象的建立細節.
  • 建立InstanceCarFactory類
package com.spring.factory;

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

public class InstanceCarFactory {

    private static Map<String,Car> map = null;

    public InstanceCarFactory() {
        map = new HashMap<String, Car>();
        map.put("Audi", new Car("Audi",));
        map.put("Ford", new Car("Ford",));
    }

    public Car getCar(String brand){
        return map.get(brand);
    }
}
           
  • 配置bean:
<!-- 配置工廠bean -->
<bean id="carFactory" class="com.spring.factory.InstanceCarFactory"></bean>

<!-- 使用工廠來建立Car的bean執行個體 -->
<bean id="car2" factory-bean="carFactory" factory-method="getCar">
    <constructor-arg value="Audi"></constructor-arg>
</bean>
           
  • 測試:
ApplicationContext ctx = new ClassPathXmlApplicationContext("beans-factory.xml");
Car car2 = (Car) ctx.getBean("car2");
System.out.println(car2);
           
spring基礎知識 (12):工廠方法配置bean

本系列參考視訊教程: http://edu.51cto.com/course/1956.html