1. 程式人生 > >工廠方法配置bean

工廠方法配置bean

const @override shm ack getc ring 工廠 null ati

1:靜態工廠方法配置bean

1):對象

package com.spring.helloworld;

public class Car {
    private String name;
    private double jia;
    public void setName(String name) {
        this.name = name;
    }
    public void setJia(double jia) {
        this.jia = jia;
    }

    @Override
    public String toString() {
        
return "Car [name=" + name + ", jia=" + jia + "]"; } public Car(String name, int jia) { super(); this.name = name; this.jia = jia; } }

2):靜態工廠方法

package com.spring.helloworld;

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

public class StaticCarFactory {
    
    
private static Map<String ,Car> cars=new HashMap<String,Car>(); static{ cars.put("audi", new Car("audi",30000)); cars.put("ford", new Car("ford",40000)); } public static Car getCar(String name){ return cars.get(name); } }

3):配置文件

<!-- 
class屬性:指向靜態工廠方法的全類名
factory-method:指向靜態工廠方法的名稱
constructor-arg:如果工廠方法需要傳入參數,則使用構造器配置參數
-->
<bean id="car" class="com.spring.helloworld.StaticCarFactory"
factory-method="getCar">
<constructor-arg value="ford"></constructor-arg>
</bean>

2:實例工廠方法

package com.spring.helloworld;

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

public class InstanceCarFactory {
    
    private  Map<String ,Car> cars=null;
    public InstanceCarFactory(){
        cars=new HashMap<String,Car>();
        cars.put("audi", new Car("audi",30000));
        cars.put("ford", new Car("ford",30000));
        
    }
    public  Car getCar(String name){
        return cars.get(name);
    }
}
<!-- 配置工廠的實例 -->
    <bean id="carFactory" class="com.spring.helloworld.InstanceCarFactory"></bean>
    <!-- 通過實例工廠方法來配置bean
        factory-bean:指向實例工廠方法的全類名
        factory-method:指向靜態工廠方法的名字
        constructor-arg:如果工廠方法需要傳入參數,則使用構造器配置參數
     -->
    <bean id="car" 
    factory-bean="carFactory" factory-method="getCar">
    <constructor-arg value="ford"></constructor-arg>
    </bean>

工廠方法配置bean