Spring中bean实例化的三种方式

Spring中bean实例化的三种方式

使用xml配置来实例化bean共分为三种方式,分别是普通构造方法创建、静态工厂创建、实例工厂创建,OK,那么接下来我们来分别看看这几种方式。
原文地址:https://blog.csdn.net/u012702547/article/details/56021922

普通构造方法创建

这种创建方式使我们使用最多的一种创建方式,直接配置bean节点即可,比如我有一个User类,如下:

public class User {
    public void add() {
        System.out.println("add()---------");
    }
}

然后通过简单配置一个bean节点就可以获取实例了,如下

<bean class="org.sang.User" id="user"/>

OK,我们通过如下代码进行一个简单的测试:

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User user = (User) context.getBean("user");
        System.out.println(user);

运行输出结果如下:
在这里插入图片描述

静态工厂创建

除了通过普通的构造方法创建之外,我们也可以通过静态构造方法来创建一个bean的实例,假设我有一个类叫做User2,如下:

public class User2 {
    public void add() {
        System.out.println("add2()---------");
    }
}

我给它创建一个静态工厂,如下:

public class User2Factory {
    public static User2 getInstance() {
        return new User2();
    }
}

该工厂中有一个静态方法,该静态方法返回一个User2的实例,在Spring的配置文件中,我们看看如何生成User2的实例:

<bean id="user2" class="org.sang.User2Factory" factory-method="getInstance"/>

还是bean节点,只是多了一个factory-method属性,该属性指明该类中的静态工厂方法名为getInstance,这样Spring框架就知道调用哪个方法来获取User2的实例了,测试代码如下:

@Test
    public void test2() {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User2 user = (User2) context.getBean("user2");
        user.add();
    }

测试结果如下:
在这里插入图片描述
值得强调的是,这种方法并不常用。

实例工厂创建

小伙伴们看了静态工厂创建bean实例肯定都觉得很麻烦,事实上还有比静态工厂更麻烦的写法,那就是通过实例工厂来创建bean实例。实例工厂,顾名思义,就是我们工厂中的方法不是静态的,比如说,我有一个实体类叫做User3,如下:

public class User3 {
    public void add() {
        System.out.println("add3()---------");
    }
}

然后我还有一个工厂方法,如下

public class User3Factory {
    public User3 getUser3() {
        return new User3();
    }
}

小伙伴们看到,在User3Factory类中有一个getUser3的方法,该方法返回一个User3类的实例,但是该方法不是静态的,那么我们在Spring的配置文件中要进行怎样的配置才能获取User3的一个实例呢?如下:

<bean class="org.sang.User3Factory" id="user3Factory"/>
    <bean id="user3" factory-bean="user3Factory" factory-method="getUser3"/>

第一个bean用来获取user3Factory的实例,第二个bean则根据User3Factory的实例,然后指定factory-method,通过getUser3方法来获取User3的实例。
测试代码如下

 @Test
    public void test3() {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        User3 user = (User3) context.getBean("user3");
        user.add();
    }

测试结果如下:
在这里插入图片描述
OK,以上就是bean实例化的三种方式,最最常用的是第一种。
本文案例GitHub地址 https://github.com/lenve/JavaEETest/tree/master/Test28-Spring1。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值