代码编织梦想

系列文章目录




一、Bean的主要四个阶段

Spring bean的生命周期只有四个主要阶段,其他都是在这四个主要阶段前后的扩展点,这四个阶段是:
1.实例化 Instantiation
2.属性赋值 Populate
3.初始化 Initialization
4.销毁 Destruction
其中实例化和属性赋值分别对应构造方法和setter方法的注入,初始化和销毁是用户能自定义扩展的两个阶段。
在这里插入图片描述在这里插入图片描述

二、前置处理器和后置处理器

前置处理器是在实例化前后进行干预

后置处理器是在初始化前后进行干预

这里面以后置处理器为例:

  • 作用:在调用初始化方法前后对bean进行额外的处理。

  • 实现:

    • 实现BeanPostProcessor接口
    • 重写方法
      • postProcessBeforeInitialization(Object, String):在bean的初始化之前执行
      • postProcessAfterInitialization(Object, String):在bean的初始化之后执行
    • 在容器中装配后置处理器
  • 注意:装配后置处理器会为当前容器中每个bean均装配,不能为局部bean装配后置处理器

添加后置处理器后bean的生命周期

① 通过构造器或工厂方法创建bean实例

② 为bean的属性设置值和对其他bean的引用

postProcessBeforeInitialization(Object, String):在bean的初始化之前执行

③ 调用bean的初始化方法

postProcessAfterInitialization(Object, String):在bean的初始化之后执行

④ bean可以使用了

当容器关闭时,调用bean的销毁方法

  • 1、实例化----实例化的过程是一个创建Bean的过程,即调用Bean的构造函数,单例的Bean放入单例池中。

  • 2、初始化----初始化的过程是一个赋值的过程,即调用Bean的setter,设置Bean的属性。

三、扩展点——多个bean的接口

1.多次干预

两个最重要的接口:
InstantiationAwareBeanPostProcessor
BeanPostProcessor
实现这两个接口的bean,会自动切入到相应的生命周期中,其中InstantiationAwareBeanPostProcessor是作用于实例化阶段的前后,BeanPostProcessor是作用于初始化阶段的前后。


/*
 四个主生命周期
         (1)实例化之前干预     InstantiationAwareBeanPostProcessorAdapter.postProcessBeforeInstantiation()
     1.实例化
          (2)实例化之后干预   InstantiationAwareBeanPostProcessorAdapter.postProcessAfterInstantiation()
     2.填充属性(给属性赋值)
     
          (1)初始化之前干预   BeanPostProcessor.postProcessBeforeInitialization()
     3.初始化化(比如准备资源文件)
             3) 属性进行干预  ----修改属性或属性值
     
         (2)初始化之后干预    BeanPostProcessor.postProcessAfterInitialization()
         
     4.销毁(释放资源---对象从内存销毁)
 N个接口
     1、干预多次
         1)BeanPostProcessor
     2、干预一次
         1)Aware
     
 */
 

2.只干预一次

与aware有关的接口

BeanNameAware
BeanFactoryAware
ApplicationContextAware
需要实体类实现这些接口,分别调用 Bean 的 setBeanName() 方法传入当前 Bean 的 id 值,调用 setBeanFactory() 方法传入当前工厂实例的引用,调用 setApplicationContext() 方法传入当前 ApplicationContext 实例的引用。


总结

Bean 生命周期的整个执行过程描述如下:

  1. 如果创建了一个类继承了InstantiationAwareBeanPostProcessorAdapter接口,并在配置文件中配置了该类的注入,即InstantiationAwareBeanPostProcessorAdapter和bean关联,则Spring将调用该接口的postProcessBeforeInstantiation()方法。
  2. 根据配置情况调用 Bean 构造方法或工厂方法实例化 Bean。
  3. 如果InstantiationAwareBeanPostProcessorAdapter和bean关联,则Spring将调用该接口的postProcessAfterInstantiation()方法。
    利用依赖注入完成 Bean 中所有属性值的配置注入。
    • 如果 Bean 实现了 BeanNameAware 接口,则 Spring 调用 Bean 的 setBeanName() 方法传入当前 Bean 的 id 值。
    • 如果 Bean 实现了 BeanFactoryAware 接口,则 Spring 调用 setBeanFactory() 方法传入当前工厂实例的引用。
    • 如果 Bean 实现了 ApplicationContextAware 接口,则 Spring 调用 setApplicationContext() 方法传入当前 ApplicationContext 实例的引用。
  4. 如果 BeanPostProcessor 和 Bean 关联,则 Spring 将调用该接口的预初始化方法 postProcessBeforeInitialzation() 对 Bean 进行加工操作,此处非常重要,Spring 的 AOP 就是利用它实现的。
  5. 如果 Bean 实现了 InitializingBean 接口,则 Spring 将调用 afterPropertiesSet() 方法。
  6. 如果在配置文件中通过 init-method 属性指定了初始化方法,则调用该初始化方法。
  7. 如果 BeanPostProcessor 和 Bean 关联,则 Spring 将调用该接口的初始化方法 postProcessAfterInitialization()。注意:以上工作完后才能以后就可以应用这个bean了,那这个bean是一个singleton的,所以一般这种情况下我们调用同一个id的bean会是在内容地址相同的实例,当然在spring配置文件中也可以配置非Singleton。
  8. 如果 Bean 实现了 DisposableBean 接口,则 Spring 会调用 destory() 方法将 Spring 中的 Bean 销毁;如果在配置文件中通过 destory-method 属性指定了 Bean 的销毁方法,则 Spring 将调用该方法对 Bean 进行销毁。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41810415/article/details/127157805

spring bean生命周期详解,源码分析-爱代码爱编程

目录 简介如何获取beanClassPathXmlApplicationContext方法refresh源码分析finishBeanFactoryInitialization(beanFactory):spring bean的完整生命周期进阶版spring bean的完整生命周期 简介 在传统的Java应用中,bean的生命周期很简单,使用J

SpringBean生命周期详解-爱代码爱编程

SpringBean生命周期详解 一、简述: Spring是我们每天都在使用的框架,Bean是被Spring管理的Java对象,是Spring框架最重要的部分之一,那么让我们一起了解一下Spring中Bean的生命周期是怎样的吧 二、流程图 总体分为四个阶段: ①实例化 CreateBeanInstance ②属性赋值 Populat

Spring bean生命周期详解-爱代码爱编程

Spring Bean的完整生命周期从创建Spring容器开始,直到最终Spring容器销毁Bean,这其中包含了一系列关键点。 Spring bean生命周期 四个阶段 Bean的实例化阶段 Bean的设置属性阶段 Bean的 初始化阶段 Bean的销毁阶段 Spring bean生命周期13个环节 阶段1:Bean元信息配置阶段 阶段2:Bea

Bean的生命周期-爱代码爱编程

站在设计者的角度考虑设计IOC容器 加载Bean的配置(比如xml配置) 比如不同类型资源的加载,解析成生成统一Bean的定义根据Bean的定义加载生成Bean的实例,并放置在Bean容器中 比如Bean的依赖注入,Bean的嵌套,Bean存放(缓存)等除了基础Bean外,还有常规针对企业级业务的特别Bean 比如国际化Messag

Springbean生命周期详解-爱代码爱编程

在传统的java应用中,JavaBean的生命周期一般都是浅化理解,就是在在Java中使用关键字new把Bean进行实例化,然后Bean就可以使用了,一旦不使用了,Java会自动进行垃圾回收。 如果是在springBean里面,Bean的生命周期就显得非常复杂,我把它详细了解了一下,分为十个步骤: Bean的实例化:spring启动后,会查找和加载需要

Spring系列之Bean生命周期详解-爱代码爱编程

来看几个问题 想不想月薪超过5万? 想不想进入公司架构组? 想不想成为项目组的负责人? 想不想成为spring的高手,超越99%的对手? 那么本文内容是你必须要掌握的。 本文主要详解bean的生命周期,分为13个环节,每个环节中spring都提供了一些扩展点,我们都将进行详细说明,让大家全面掌握这块的知识。 Spring bean生命周期13

spring bean的生命周期详解-爱代码爱编程

文章目录 序言流程图具体过程1.创建BeanFactory2.扫描3.合并BeanDefinition4.加载类5.实例化前6. 实例化7. BeanDefinition的后置处理8. 实例化后9. 填充填充10. 执行Aware11. 初始化前12. 初始化13. 初始化后14.bean销毁 序言 Spring最重要的功能就是帮助程序员创建

大厂高频面试题spring bean生命周期最详解_wadfdhsajd的博客-爱代码爱编程

Spring作为当前Java最流行、最强大的轻量级框架。Spring Bean的生命周期也是面试高频题,了解Spring Bean周期也能更好地帮助我们解决日常开发中的问题。程序员应该都知道Spring的基础容器是ApplicationContext。应很多粉丝的强烈建议,本文我来分析分析 ApplicationContext中Bean的生命周期。Appl

详解spring中bean的生命周期_努力搬砖的白衣的博客-爱代码爱编程

简述bean生命周期 从对象创建到对象销毁的过程。Spring的IOC容器可以管理bean的生命周期,其允许在bean的生命周期的特定时间点执行相应的任务。 bean的生命周期(不考虑bean的后置处理器) 通过构造器或工厂方法创建bean实例为bean的属性设置值和对其它bean引用调用bean的初始化方法使用bean当容器关闭时,调用bean的销

牛客每日刷题__18shou的博客-爱代码爱编程

✅作者简介:我是18shou,一名即将秋招的java实习生 ✨个人主页:_18shou 🔥系列专栏:牛客刷题专栏 👉 在线刷题面经模拟面试    题目 题目主要信息: 给出一组区间,区间包括起始点,要求将重叠的区间合并重叠后的区间按照起点位置升序排列 思路 方法: 排序+贪心(推荐使用) 知识点:贪心思想 贪心思想属于动态规划思

基于java演唱会购票系统计算机毕业设计源码+系统+数据库+lw文档+部署_ssh 演唱会门票预约管理系统-爱代码爱编程

基于JAVA演唱会购票系统计算机毕业设计源码+系统+数据库+lw文档+部署 基于JAVA演唱会购票系统计算机毕业设计源码+系统+数据库+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开发软件:idea eclipse 前端技术:Layui、HTML、CSS、JS、JQuery等技术 后端技术