Spring配置文件bean标签的创建

Spring配置文件bean标签的创建

resources目录下的applicationContext.xml(Spring的配置文件)

当scope取值为"singleton"时

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="userDao" class="com.yiheng.dao.impl.UserDaoImpl" scope="singleton"></bean>
</beans>

UserDaoImpl.java

package com.yiheng.dao.impl;

import com.yiheng.dao.UserDao;

public class UserDaoImpl implements UserDao {
    public UserDaoImpl(){
        System.out.println("UserDaoImpl创建");
    }
    @Override
    public void save() {
        System.out.println("save.....");
    }

}

UserDao接口

package com.yiheng.dao;
public interface UserDao {
    public void save();
}

下面是一个测试代码片

public class SpringTest {
    @Test
    //测试scope属性
    public void test1(){
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao1 = (UserDao)app.getBean("userDao");
        UserDao userDao2 = (UserDao)app.getBean("userDao");
        System.out.println(userDao1);
        System.out.println(userDao2);
    }
}

1、当Spring的配置文件中本标签中的scope=“singleton”时
测试结果为:

在这里插入图片描述
结论:可以看出UserDaoImpl只创建了一次,测试输出两次同一个地址。所以当scope=“singleton”时,bean的实例化个数是1个

2、当Spring的配置文件中本标签中的scope=“prototype”时
测试结果为:

在这里插入图片描述
结论:UserDaoImpl创建了两次,测试输出了不同的地址,所以当scope=“prototype”时,bean的实例化个数是多个

下面我们猜测当scope取singleton和prototype时,bean的实例化时机是否一样

当scope取singleton时

我们在如图位置添加断点
在这里插入图片描述

可以看出当程序运行完ApplicationContext app = new ClassPathXmlApplicationContext(“applicationContext.xml”)这一行,UserDaoImpl就实例化成功了,可以看出当调用完Spring的配置文件applicationContext.xml,就已经创建了bean。

当scope取prototype时

在这里插入图片描述
运行完ApplicationContext app = new ClassPathXmlApplicationContext(“applicationContext.xml”)这一行,没有输出

接着程序往下走一步

在这里插入图片描述

再走一步

在这里插入图片描述

结论:

1、当Spring的配置文件的bean标签的scope属性取值为singleton时,在运行Spring配置文件(创建容器)时就创建UserDaoImpl。
2、scope属性取值为prototype时,在运行Spring配置文件时没有创建UserDaoImpl,而是在getBean(使用对象)时创建UserDaoImpl。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值