scope:指对象的作用范围,取值如下

1.singleton:默认值,单例的
2.prototype:多例的

3.request:WEB项目,Spring创建一个Bean的对象,把对象存入到request域中
4.sessin:WEB项目,Spring创建一个Bean的对象,把对象存入到sessiont域中
5.global session:WEB项目中,应用在Portlet环境,如果没有Protlet环境那么globalSession相当于session

当前只了解singleton和prototype

===================================================
singleton如下
applicationContext.xml配置文件

<?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.hao.dao.impl.UserDaoImpl" scope="singleton"></bean></beans>

测试类

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==userDao2);}
}

结果:true
说明容器当中是单一对象


那UserDaoImpl什么时候被创建呢?那就来测试一下
1.重写空参构造方法

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

2.打断点,调试

我们发现在断点处,当加载配置文件,创建spring容器时,UserDaoImpl被创建了

================================================================================================

prototype测试如下
applicationContext.xml配置文件

<?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.hao.dao.impl.UserDaoImpl" scope="prototype"></bean></beans>

1.重写UserDaoImpl空参构造方法(同上,省略代码)
2.断点调试

我们发现当加载配置文件,创建spring容器时,UserDaoImpl类对象没有被创建,继续走下一步

我们发现当调用getBean时,创建了UserDaoImpl对象,继续执行下一步

我们发现再此getBean时,另外一个UserDaoImpl对象也被创建了,而且我们发现两个对象的地址不一样
说明prototype是多实例对象,且在调用getBean方法时创建类对象

======================================================================================================
总结:
1)当scope属性取值为singleton时
Bean实例化个数:1个
Bean的实例化时机,当Spring核心配置文件被加载时,实例化配置的Bean实例(创建对象)
Bean的生命周期
*对象创建:当加载应用,创建容器时,对象就被创建了
*对象运行:只要容器在,对象一直活着
*对象销毁:当应用卸载,销毁容器时,对象被销毁
2)当scope属性取值为prototype时
Bean实例化个数:多个
Bean的实例化时机,当调用getBean()方法时,实例化Bean实例(创建对象)
Bean的生命周期
*对象创建:当使用对象时,创建新的对象实例
*对象运行:只要容器在,对象一直活着
*对象销毁:当对象长时间不用时,就被Java的垃圾回收器(GC)回收了

Spring-Bean标签属性scope范围相关推荐

  1. Spring bean 标签加载、解析过程分析

    概述 上一篇[Spring 加载.解析applicationContext.xml 流程]分析了从xml文件加载到开始解析xml里面的标签为止,基本都是跟spring 真正的核心没什么关系. 这篇我们 ...

  2. Spring Boot : Bean标签属性

    1.美图 2.概述 属性 解释 ① id属性 Bean的名称在IOC容器中必须是唯一的. ② class属性 指定Bean对应实现类的全类名,即包名加类名,必须有无参构造. ③ scope属性: 前面 ...

  3. Spring Bean的属性注入

    在spring中bean的属性注入有两种 构造器注入 <bean id="car" class="nwtxxb.di.Car"><constr ...

  4. Spring配置文件中bean标签的scope属性

    转自:https://fj-sh-chz.iteye.com/blog/1775149 singleton  (默认属性) Spring将Bean放入Spring IOC容器的缓存池中,并将Bean引 ...

  5. spring— Bean标签scope配置和生命周期配置

    scope配置 singleton 默认值,单例的 prototype 多例的 request WEB 项目中,Spring 创建一个 Bean的对象,将对象存入到 request 域中 sessio ...

  6. spring中注解属性scope的prototype是什么意思?

    默认情况下,从 bean工厂所取得的实例为Singleton(bean的singleton属性) Singleton: Spring容器只存在一个共享的bean实例,默认的配置. Prototype: ...

  7. Spring框架基础(2)----Bean的创建及标签属性

    一.实例化Bean的三种方式 ⽅式⼀:使用无参构造函数 在默认情况下,它会通过反射调⽤⽆参构造函数来创建对象.如果类中没有无参构造函数,将创建失败. <bean id="userSer ...

  8. 标签系列二:spring 中bean解释以及bean标签里面的属性

    一.bean标签: 英文解释:Defines a single (usually named) bean. A bean definition may contain nested tags for ...

  9. Spring Bean默认配置为单实例 Spring Bean生命周期

    2019独角兽企业重金招聘Python工程师标准>>> Spring 的Bean默认的是单例的. 如果不想单例需要如下配置: <bean id="user" ...

最新文章

  1. 银联配置 linux 路径,深圳银联POS支付系统安装手册(LinuxMySQL).doc
  2. nginx的权限问题(Permission denied)解决办法
  3. 【SpringCloud】Ribbon:负载均衡
  4. debian9.8无法切换中文输入法
  5. Centos7 安装 Python3.9
  6. mfc大观之三(创建对象)
  7. LIO-SAM探秘第三章之代码解析(三) --- mapOptmization.cpp (1)
  8. [docker学习笔记] 0.工具/环境
  9. LoadRunner测试139邮箱的脚本
  10. 菜刀之中国蚁剑-安装使用及下载地址
  11. reset()方法 submit()方法
  12. usbwriter使用后还原
  13. 图书馆管理系统(一)
  14. 计算机网络实验一(常见服务和静态IP设置)
  15. js获取当前时间并转换为一定的格式
  16. koa2入门之使用koa-generator生成koa2项目
  17. redis详解(三)-- 面试题
  18. Rust代码检查工具Clippy原理浅析
  19. C语言数据结构学生成绩 顺序表
  20. 2022 年(23届)计算机保研经验分享(北航、东南、西工大、哈工大、中山等)

热门文章

  1. java中 快捷键输入System.out.println();
  2. BZOJ2958 序列染色
  3. Ubuntu linux 关机、重启、注销 命令
  4. java文本编辑器 运行_能编译运行java的简单文本编辑器
  5. 代码讲解java_主要代码的讲解
  6. flink 4-输出
  7. rose顺序图转换为协作图_【S7200指令教程】顺序控制指令SCR SCRT SCRE
  8. java 索取了多表联合查询分页,mybatis-plus多表联合分页查询
  9. html实现旅游网站代码_[资源推荐] 必须收藏的两个查找论文和代码实现的网站!...
  10. 在机器学习中,怎么对超参数Hyper parameter优化?我总结了以下常见的方法