5. Spring IoC工厂方法创建对象

IoC是典型的工厂模式,IoC通过工厂模式创建bean有两种方式:

静态工厂方法

创建Car类

package com.southwind.entity;

public class Car {
    private int num;
    private String brand;

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public String getBrand() {
        return brand;
    }

    public void setBrand(String brand) {
        this.brand = brand;
    }

    @Override
    public String toString() {
        return "Car{" +
                "num=" + num +
                ", brand='" + brand + '\'' +
                '}';
    }

    public Car(int num, String brand) {
        this.num = num;
        this.brand = brand;
    }
}

创建静态汽车工厂类,StaticCarFactory,在静态static代码块中初始化保存car对象的carMap,以便在getCar()方法中通过id来取car对象

在spring.xml中配置静态工厂类的bean

实例工厂方法

创建实例汽车工厂类,InstanceCarFactory,与静态工厂类初始化不同,我们需要在无参构造函数中初始化carMap。

在spring.xml中的配置

总结

对比两种方式的区别,静态工厂方法的方式获取Car对象,不需要实例化工厂对象,因为静态工厂的静态方法不需要创建对象即可调用,所以spring.xml中只需要配置一个Car bean,不需要配置Factory bean。

实例工厂方法获取Car对象,必须先实例化工厂对象,因为调用的是非静态(实例)方法,必须通过实例化对象来调用方法,不能之间通过类来调用,所以spring.xml中需要先配置Factory bean,再配置Car bean。

Last updated