Spring中实例化Bean中的三种方式

Spring中实例化Bean中的三种方式

通过构造器实例化

可以直接使用默认的构造器实例化Bean

先创建Bean04类,为了等一下能够区分是哪种方式实例化的Bean,所以可以在该类中添加一个方法输出一条语句。

public class Bean04 {
    // 构造器实例化
    public void msg() {
        System.out.println("构造器实例化Bean");
    }
}

再编写配置文件bean04.xml,再该配置文件中写入如下内容。

<bean id="bean04" class="top.lukeewin.dao.Bean04"></bean>

最后编写测试类。

	// 测试构造器实例化
    @Test
    public void test01() {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("bean04.xml");
        Bean04 bean04 = (Bean04) ctx.getBean("bean04");
        bean04.msg();
    }

通过静态工厂实例化

创建两个类,一个类作为Bean类,另一个作为静态工厂类,并且静态工厂类中必须有一个静态方法。静态方法返回一个Bean实例。

定义一个Bean类

public class Bean05 {
    // 静态工厂实例化
    public void msg() {
        System.out.println("静态工厂实例化Bean");
    }
}

定义一个静态工厂类

public class StaticBeanFactory {
    // 静态工厂实例化
    public static Bean05 getInstance() {
        return new Bean05();
    }
}

然后需要配置xml配置文件。

需要注意的是:配置文件中一定要记得加上factory-method属性,并且该属性的值是静态工厂中的静态方法,即返回实例的方法。同时还需要注意class路径写的是静态工厂的类路径,而不是实例的类路径。

<bean id="bean05" class="top.lukeewin.dao.StaticBeanFactory" factory-method="getInstance"></bean>

最后编写测试代码

	// 测试静态工厂实例化
    @Test
    public void test02() {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("bean04.xml");
        Bean05 bean05 = (Bean05) ctx.getBean("bean05");
        bean05.msg();
    }

通过实例工厂实例化

创建两个类,一个作为Bean类,另一个作为实例工厂类,**这里不需要定义为静态方法。**只需要设置一下配置文件即可。

定义一个Bean类

public class Bean06 {
    // 实例工厂实例化
    public void msg() {
        System.out.println("实例工厂实例化Bean");
    }
}

定义一个实例工厂类

public class BeanFactory01 {
    // 实例工厂实例化
    private Bean06 getInstance() {
        return new Bean06();
    }
}

然后编写配置文件。

配置文件中需要注意:分别定义两个bean标签,其中实例工厂类中的bean标签和其它普通bean标签一样,但是实例类中的bean标签必须要有factory-bean属性,并且属性的值是实例工厂的id值。还需要有factory-method属性,该属性的值指明了由实例工厂中的哪个方法产生实例。

<bean id="bean06_instance" class="top.lukeewin.dao.BeanFactory01"></bean>
<bean id="bean06" factory-bean="bean06_instance" factory-method="getInstance"></bean>

编写测试代码。

	// 测试实例工厂实例化
    @Test
    public void test03() {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("bean04.xml");
        Bean06 bean06 = (Bean06) ctx.getBean("bean06");
        bean06.msg();
    }

最后三种方式的运行结果如图所示。

image-20210901121728940

【Spring系列教程01】Spring中实例化对象的三种方式


本文章对应的视频,请点击这里

更多内容欢迎访问我的个人博客,以及我的个人B站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值