Spring 中 IoC 通过⼯⼚模式创建 bean—05

IoC 通过⼯⼚模式创建 bean 的⽅式有两种:

  • 静态工厂方法
  • 实例工厂方法

一、静态工厂方法

1、创建实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Car {
    private int id;
    private String name;
}

2、创建静态工厂(在静态工厂的静态代码块中创建 目标对象 ,给一个静态方法用于获取 工厂中创建好的对象)

public class StaticFactory {

    private static Map<Long, Car> carMap = new HashMap<Long, Car>();

    static {
        Car car1 = new Car(1,"大众");
        Car car2 = new Car(2,"大奔");
        carMap.put(1L,car1);
        carMap.put(2L,car2);
    }

    public static Car getCar(Long l){
        return carMap.get(l);
    }
}

3、在bean.xml 中配置工厂(使用 factory-method 调用工厂中的getCar方法创建目标 bean。 使用constructor-arg 来设置 getCar 方法的参数)

<bean id="car" class="com.cl.factory.StaticFactory" factory-method="getCar">
    <constructor-arg value="1"/>
</bean>

4、通过ApplicationContext对象从IoC容器中获取Bean

public class Test {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
        Car car = (Car) applicationContext.getBean("car");
        System.out.println(car);
    }
}

测试结果:
在这里插入图片描述

二、实例工厂方法

1、创建实体类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Car {
    private int id;
    private String name;
}

2、创建实例工厂(在实例工厂中的无参构造方法中创建 目标对象,)

public class InstanceFactory {
    private Map<Long, Car> carMap;

    public InstanceFactory(){
        carMap = new HashMap<Long, Car>();
        Car car1 = new Car(1,"大众");
        Car car2 = new Car(2,"大奔");
        carMap.put(1L,car1);
        carMap.put(2L,car2);
    }
    public Car getCar(Long l){
        return carMap.get(l);
    }
}

3、在bean.xml 中配置工厂(先配置实例工厂 bean,然后配置实例工厂创建 car。使用factory-bean来关联实例工厂的bean;使用 factory-method 调用工厂中的getCar方法创建目标 bean;使用constructor-arg 来设置 getCar 方法的参数)

<!-- 配置实例工厂 bean -->
<bean id="instanceFactory" class="com.cl.factory.InstanceFactory"></bean>

<!-- 配置实例工厂创建 car -->
<bean id="car1" factory-bean="instanceFactory" factory-method="getCar">
    <constructor-arg value="1"/>
</bean>

4、通过ApplicationContext对象从IoC容器中获取Bean

public class Test {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("bean.xml");
        Car car = (Car) applicationContext.getBean("car1");
        System.out.println(car);
    }
}

测试结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值