[Spring学习]06 Spring Bean的生命周期

2023-11-08

一、Spring bean的生命周期

  1. 传统的Java应用中,bean的生命周期为:使用new 进行Bean的实例化,然后使用该Bean。一旦bean不再被使用,则由Java自动进行垃圾回收。
  2. 在Spring框架应用中,所有的Bean对象都有从创建、初始化、服务到销毁的这个过程,我们称之为Bean对象的生命周期。Spring Bean的生命周期比传统的Java应用的生命周期要复杂,但其可扩展性强。

在这里插入图片描述
Spring Bean实例生命周期的执行过程如下:

  • Spring启动,查找并加载需要被Spring管理的Bean,对Bean进行实例化,默认Bean是单例;
  • Spring实例化后对Bean进行依赖注入;
  • 如果Bean实现了BeanNameAware接口,Spring将Bean的id传给setBeanName()方法;
  • 如果Bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory方法,将BeanFactory实例传进来;
  • 如果Bean实现了ApplicationContextAware接口,它的setApplicationContext()方法将被调用,将应用上下文的引用传入到Bean中;
  • 如果Bean实现了BeanPostProcessor接口,它的postProcessBeforeInitialization方法将被调用;
  • 如果Bean实现了InitializingBean接口,Spring将调用它的afterPropertiesSet接口方法,类似的如果Bean使用了init-method属性声明了初始化方法,则再调用该方法;
  • 如果Bean实现了BeanPostProcessor接口,它的postProcessAfterInitialization接口方法将被调用;
  • 此时Bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用上下文被销毁;
  • 若Bean实现了DisposableBean接口,Spring将调用它的distroy()接口方法。如果Bean使用了destroy-method属性声明了销毁方法,则再调用该方法;

二、连接池配置

在Spring配置文件中,我们可以通过配置init-method,destory-method的属性来指定Bean的生命周期方法。

<!-- 比如连接池的配置 -->
<bean id="cPool" class="com.beans.ConnectionPool"
      scope="singleton"
      init-method="init"
      destroy-method="close">
</bean>

在连接池的配置中,我们可以为连接池指定由连接池提供的 init 和 close 的方法来给连接池对象指定生命周期。

在Spring中Bean对象的销毁是由Bean对象的作用域的配置来决定的:
1、singleton 作用域的对象可以在容器关闭时会由Spring调用对象的销毁资源的方法来销毁Bean对象;
2、prototype 作用域的对象可以由容器创建对象,初始化对象,但Spring容器不负责销毁。

三、延时加载机制

在Spring框架应用中,容器初始化时会默认构建所有由Spring管理的对象,但如果这些对象长时间不使用还占着内存就会造成一定的资源浪费,为了解决这个问题,Spring中还提供了一种延时加载机制,以此来提高系统资源的有效使用。

Spring 中的延时加载有两种方式:
1)在bean元素中将 lazy-init 属性的值设为 false,这种方式只对当前设置的单个bean元素有效:

<!-- 例如连接池的延时加载设置 -->
<bean id="cPool" class="com.beans.ConnectionPool"
      scope="singleton"
      init-method="init"
      destroy-method="close"
      lazy-init="false">
</bean>

2)在beans元素中将 default-lazy-init 属性的值设为 true ,这种方式用于指定 beans 标签中所有 bean 的延时加载策略。例如:

<?xml version="1.0" encoding="UTF-8"?>
<beans default-lazy-init="true"
    xmlns="http://www.springframework.org/schema/beans" 
    xsi:schemaLocation="  
       http://www.springframework.org/schema/beans   
       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
       
    <bean id="cPool" 
			class="com.beans.ConnectionPool" 
			scope="singleton" 
			init-method="init" 
			destroy-method="destroy">
	 </bean>
	
</beans>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[Spring学习]06 Spring Bean的生命周期 的相关文章

随机推荐

  • 管理用户账号

    目录 Windows平台用户账号介绍 管理本地用户账号 用户配置文件 演示配置漫游用户配置文件 强制漫游配置说明 管理本地组 组的操作 案例分析 Windows平台用户账号介绍 在Windows系统中 每当用户需要登录到系统时就需要对用户进
  • 复杂grid 支持多表头,固定表头,冻结列,合并行

    该组件支持三种渲染形态 因为有些简单的表格没必要去做太复杂的处理 支持自适应页面宽度和可以设置固定宽度 理论上是所有浏览器都支持 但是因为我引用了一些工具类 处理数组的filter map 所以向前兼容可以自己实现这些方法 第一种 不需要固
  • Ubuntu系统下查看显卡相关信息

    查看显卡信息 root ubuntu home ubuntu lspci grep i vga 02 00 0 VGA compatible controller NVIDIA Corporation GM200 GeForce GTX T
  • Java将文件转换成二维码

    生成二维码主要代码为在步骤1 2中 下边后续步骤3 4 5涉及到具体的业务 要是用该工具类时需要拷贝前两个步骤代码即可 1 在项目pom xml文件中引入生成二维码的第三方依赖
  • 自己写的点云点集凹包求解 ,不是凸包!!!(附C++代码)

    近期遇到一个计算几何问题 需要从点集中重建一个粗略合理的几何形状 求出一定程度上反映这些散点轮廓的平面多边形 给出边的连接方式即可 如从下图的左图散点重建为右图的形状 网上流传的版本都是求凸包 而不是求凹包 于是自己写一个版本的代码 有瑕疵
  • Java项目---开发一个学生成绩管理系统(使用mysql数据库)

    Java项目 开发一个学生成绩管理系统 使用mysql数据库 1 设计数据库 2 添加jdbc驱动包及数据库连接 3 修改代码之前 我们还需要将数据库中用到的列名进行定义 定义在一个新的Applicant类里面 并且再get set将其封装
  • 基于Python分析气象数据教程-2

    一 前言 在这个博客中 我们正在对数据集是否进行假设检验 并试图证明该假设是否正确 我们也在做一些数据清理技术 数据可视化和假设检验 在之前的博客中我们已经介绍了气象数据的基本处理 二 相关库的引入 Numpy Pandas Matplot
  • securecrt8注册码

    securecrt8注册码 两个可用 Name meisi Company TEAM ZWT Serial Number 03 14 367662 License Key ACCFAX R9FHJ7 QZVS2P JPBCVA ABCMBF
  • (六) 性能提示

    Chapter 6 Performance Tips 译 章节6 性能提示 6 1 Small tables of large geometries 译 6 1 大型几何图形的小型表格 6 1 1 Problem description 译
  • iar中 让代码在sram中运行

    环境 iar 8 40 1 MCU mk64 1 关键字 ramfunc iar中可以利用关键字 ramfunc将函数放在ram中 带 ramfunc的函数调用不带 ramfunc的函数会出现警告 同时cpu 执行速度会变慢 ramfunc
  • 机器人教育怎么培养双商皆高的孩子

    相信每个孩子在老师眼中 都不只是学生 更代表着一个个充满希望的未来 机器人教育除了关注孩子的综合科学素养之外 也会反复强调对道德层面的培养 格物斯坦小坦克就来聊聊机器人教育是如何培养双商皆高的孩子 在越来越强调升学率的大环境下 道德层面的教
  • TCP 协议十大相关特性总结

    目录 一 TCP特性 二 报文格式 TCP十大核心特性 1 确认应答 2 超时重传 3 连接管理 三次握手 四次挥手 三次握手 四次挥手 4 滑动窗口 情况一 接收方的ACK丢失 情况二 发送方的数据包丢失 5 流量控制 6 拥塞控制 7
  • 微信获取JS-SDK的一些注意事项

    历时两天多 取到了JS SDK 可以开始调用微信提供的网页功能接口 遇到了很多的问题 在这里记录并分享 首先是设置安全域名的问题 要注意添加完ip白名单后 注意JS接口安全域名的设置 这里设置不当会报错 invalid url domain
  • 最大熵学习笔记(零)目录和引言

    生活中我们经常听到人们说 不要把鸡蛋放到一个篮子里 这样可以降低风险 深究一下 这是为什么呢 其实 这里边包含了所谓的最大熵原理 The Maximum Entropy Principle 本文为一则读书笔记 将对最大熵原理以及由此导出的最
  • 2023年欧亚计算机科学与信息技术国际会议(FCSIT 2023)

    IEEE出版 2023年欧亚计算机科学与信息技术国际会议 FCSIT 2023 重要信息 会议网址 www ecfcsit org 会议时间 2023年7月21 23日 召开地点 中国成都 出版社 IEEE CPS 截稿时间 2023年5月
  • 16、Spring Boot——JdbcTemplate多数据源

    什么是多数据源 多数据源就是 在一个应用中想要去操作多个数据库的数据 比如说一个应用有订单表放在一个数据库里面 用户表放在另一个数据库里面 那么同一个应用就要连接不同的数据源 这种架构并不多见 但它也是一种技术 以后有这种需求 一般都是通过
  • HTTP 和 HTTPS详解

    HTTP 和 HTTPS详解 目录 HTTP 和 HTTPS详解 1 http 和 https 概述 1 1 什么是http 1 2 什么是https 1 3 两者之间的区别 2 工作原理 2 1 Http工作原理 2 2 Https工作原
  • IntelliJ IDEA 官方网站 idea官网 http://www.jetbrains.com/idea/

    idea下载官网一键直达 点击跳转
  • c++子类访问父类保护成员,只能通过子类对象

    1 前言 我们知道 对外部来讲 一个类的private和protected成员 外部都不能直接访问 那么 对子类来说呢 子类如果以public方式继承父类 它还是不能直接访问private成员 并且虽然它可以访问protected成员 也是
  • [Spring学习]06 Spring Bean的生命周期

    目录 一 Spring bean的生命周期 二 连接池配置 三 延时加载机制 一 Spring bean的生命周期 传统的Java应用中 bean的生命周期为 使用new 进行Bean的实例化 然后使用该Bean 一旦bean不再被使用 则