Spring 通过工厂方法配置Bean

通过调用静态工厂方法创建Bean

--调用静态工厂方法创建Bean是将对象创建的过程封装到静态方法中,当客户需要对象时,只需要简单的调用静态方法,而不关心创建对象的细节。

--要声明通过静态方法创建Bean,需要在Bean的class属性中指定拥有该工厂的方法的类,同时在factory-mothod属性里指定工厂方法的名称,最后,使用<constrctor-arg>元素为该方法传递方法参数。

 

实例:

car类:

package com.demo.factory;

public class Car {
    private String cname;
    private double price;
    public Car(){
        
    }
    
    public Car(String cname,double price){
        this.price = price;
        this.cname = cname;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Car [cname=" + cname + ", price=" + price + "]";
    }
    
    
    
}    

静态工厂类:

package com.demo.factory;

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

/*
 * 静态工厂方法:直接调用某一个类的静态方法就可以返回Bean的实例
 * */
public class StaticFactory {
    private static Map<String, Car> cars = new HashMap<>();
    
    static{
        cars.put("audi", new Car("audi",300000));
        cars.put("ford", new Car("ford",400000));
        
    }
    //静态工厂方法
    public static Car getCar(String name){
        return cars.get(name);
    }
}

配置文件:

<!-- 通过静态工厂方法配置bean,注意不是配置静态工厂方法实例,而是配置bean实例 -->
    <!-- class属性:指向静态工厂的全类名;
        factory-method:指向静态工厂的静态方法;
        <constructor-arg>:如果方法需要返回值,则用该节点依次传入
     -->
    <bean id="car" class="com.demo.factory.StaticFactory" factory-method="getCar">
        <constructor-arg value="audi"></constructor-arg>
    </bean>

测试类:

public static void main(String[] args) throws SQLException {
        ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml");    
        Car car = (Car)ac.getBean("car");
            System.out.println(car);
            
    }

输出:

Car [cname=audi, price=300000.0]

 

posted @ 2016-10-02 21:15  夏文杰  阅读(264)  评论(0)    收藏  举报