Spring框架笔记 5 -- Spring IOC容器通过静态工厂方法和实例工厂方法获取Bean

对于通过类名在配置文件中配置Bean是再普通不过的配置了,此处略过,主要介绍通过静态工厂方法和实例工厂方法从容器中获取Bean,下面直接上代码。

二、静态工厂方法
1、实体类
public class Car {

    private String brand;
    private String price;

    public Car(String brand, String price) {
        super();
        this.brand = brand;
        this.price = price;
    }

    public String getBrand() {
        return brand;
    }

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

    public String getPrice() {
        return price;
    }

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

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

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2、静态工厂类
public class StaticCarFactory {

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

    static {
        cars.put("audi", new Car("audi", "300000"));
        cars.put("bens", new Car("bens", "400000"));
    }

    public static Car getCar(String name) {
        return cars.get(name);
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
3、application.xml配置文件:
<bean id="car1"    class="com.scorpios.spring.factory.StaticCarFactory"   factory-method="getCar">
    <constructor-arg value="bens"></constructor-arg>
</bean>
1
2
3
属性解释:
class属性:指向静态工厂方法的全类名;
factory-method: 指向静态工厂方法的名字;
constructor-arg: 如果工厂方法需要传入参数,则使用constructor-arg来配置参数;

注意:通过静态工厂方法来配置bean,注意不是配置静态工厂方法实例,而是配置bean实例

4、测试类:
public class Main {

    public static void main(String[] args) {

        ApplicationContext apx = new ClassPathXmlApplicationContext("bean-factory.xml");

        Car car1 = (Car) apx.getBean("car1");
        System.out.println(car1);

    }
}
1
2
3
4
5
6
7
8
9
10
11
5、测试结果:


二、实例工厂方法
1、实体类同上:
2、实例工厂类:
public class InstanceCarFactory {

    private Map<String, Car> cars = null;

    public InstanceCarFactory() {
        cars = new HashMap<>();
        cars.put("BMW", new Car("BMW", "500000"));
        cars.put("Audi", new Car("Audi", "300000"));
    }

    public Car getCar(String name) {
        return cars.get(name);
    }

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
3、application.xml配置文件:
<!-- 配置工厂方法 -->
<bean id="carFactory" class="com.xudong.spring.factory.InstanceCarFactory"></bean>
  
<!-- 通过实例工厂方法来配置bean -->
<bean id="car2" factory-bean="carFactory" factory-method="getCar">
    <constructor-arg value="BMW"></constructor-arg>
</bean>
1
2
3
4
5
6
7
属性解释:
factory-bean 属性:指向实例工厂方法的bean
factory-method: 指向静态工厂方法的名字;
constructor-arg:如果工厂方法需要传入参数,则使用constructor-arg来配置参数;

注意:即先需要创建工厂本身,再调用工厂的实例方法来返回bean的实例

4、测试类:
public class Main {

    public static void main(String[] args) {
    
        ApplicationContext apx = new ClassPathXmlApplicationContext("bean-factory.xml");

        Car car2 = (Car) apx.getBean("car2");
        System.out.println(car2);
    
    }
}
1
2
3
4
5
6
7
8
9
10
11
5、测试结果:

--------------------- 
作者:止步前行 
来源:CSDN 
原文:https://blog.csdn.net/zxd1435513775/article/details/83033622 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值