一、springBean的生命周期

1、  启动spring容器,也就是创建beanFactory(bean工厂),一般用的是beanFactory的子类applicationcontext,applicationcontext比一般的beanFactory要多很多功能,比如aop、事件等。通过applicationcontext加载配置文件,或者利用注解的方式扫描将bean的配置信息加载到spring容器里面。2、  加载之后,spring容器会将这些配置信息(java bean的信息),封装成BeanDefinition对象BeanDefinition对象其实就是普通java对象之上再封装一层,赋予一些spring框架需要用到的属性,比如是否单例,是否懒加载等等。3、  然后将这些BeanDefinition对象以key为beanName,值为BeanDefinition对象的形式存入到一个map里面,将这个map传入到spring beanfactory去进行springBean的实例化。4、  传入到pring beanfactory之后,利用BeanFactoryPostProcessor接口这个扩展点去对BeanDefinition对象进行一些属性修改。5、  开始循环BeanDefinition对象进行springBean的实例化,springBean的实例化也就是执行bean的构造方法(单例的Bean放入单例池中,但是此刻还未初始化),在执行实例化的前后,可以通过InstantiationAwareBeanPostProcessor扩展点(作用于所有bean)进行一些修改。6、   spring bean实例化之后,就开始注入属性,首先注入自定义的属性,比如标注@autowrite的这些属性,再调用各种Aware接口扩展方法,注入属性(spring特有的属性),比如BeanNameAware.setBeanName,设置Bean的ID或者Name;7、   初始化bean,对各项属性赋初始化值,,初始化前后执行BeanPostProcessor(作用于所有bean)扩展点方法,对bean进行修改。初始化前后除了BeanPostProcessor扩展点还有其他的扩展点,执行顺序如下:(1). 初始化前                       postProcessBeforeInitialization()(2). 执行构造方法之后                执行 @PostConstruct 的方法(3). 所有属性赋初始化值之后           afterPropertiesSet()(4). 初始化时                        配置文件中指定的 init-method 方法(5). 初始化后                    postProcessAfterInitialization()先执行BeanPostProcessor扩展点的前置方法postProcessBeforeInitialization(),再执行bean本身的构造方法再执行@PostConstruct标注的方法所有属性赋值完成之后执行afterPropertiesSet()然后执行 配置文件或注解中指定的 init-method 方法最后执行BeanPostProcessor扩展点的后置方法postProcessAfterInitialization()8、     此时已完成bean的初始化,在程序中就可以通过spring容器拿到这些初始化好的bean。9、     随着容器销毁,springbean也会销毁,销毁前后也有一系列的扩展点。销毁bean之前,执行@PreDestroy 的方法销毁时,执行配置文件或注解中指定的 destroy-method 方法。以上就是spring bean的整个生命周期其实就是根据配置文件或注解信息,生成BeanDefinition,循环BeanDefinition去实例化-》注入属性-》初始化-》销毁,在这4个阶段执行前后,spring框架提供了一系列的扩展点。

二、springBean的各种扩展点

(1)、容器级扩展点(作用于所有bean):BeanFactoryPostProcessor接口:在循环初始化springbean之前,对BeanDefinition元数据做扩展处理InstantiationAwareBeanPostProcessor接口:在对象实例化前后扩展,作用于所有beanBeanPostProcessor接口:在对象初始化化前后扩展,作用于所有bean(2)、Bean扩展点(作用于单个bean):Aware接口:springBean实例化并且注入自定义属性之后InitializingBean接口:springBean初始化时,执行构造方法结束,并且属性赋初始化值结束之后执行DiposableBean接口:springBean销毁之前执行。(3)、Bean自身的方法包括了Bean本身调用的方法通过配置文件中<bean>的init-method和destroy-method指定的方法(或者用注解的方式)(4)、包括了AspectJWeavingEnabler, ConfigurationClassPostProcessor, CustomAutowireConfigurer等等非常有用的工厂后处理器接口的方法。工厂后处理器也是容器级的。在应用上下文装配配置文件之后立即调用。

springBean生命周期相关推荐

  1. SpringBean生命周期的理解

    文章目录 前言 一.BeanFactory 和 ApplicationContext 1.1什么是Spring bean? 1.2BeanFactory 1.3ApplicationContext 1 ...

  2. 面试官问我SpringBean生命周期,我

    面试官:今天要不来聊聊Spring对Bean的生命周期管理? 候选者:嗯,没问题的. 候选者:很早之前我就看过源码,但Spring源码的实现类都太长了 候选者:我也记不得很清楚某些实现类的名字,要不我 ...

  3. spring-bean生命周期

    主要流程 1.创建IOC容器,容器调用refresh()方法刷新容器 2.初始化IOC容器配置(例如加载配置文件.设置参数等) 3.注册BeanFactoryPostProcessor后置处理器(其中 ...

  4. SpringBean生命周期详解 | 有图有真相

    文章目录 Spring IOC 1. 首先是谁控制谁? 2. 什么是反转? 3. 谁依赖谁? 4. 谁注入谁? spring ioc的加载过程 Spring Bean的生命周期 实例化 1.实例化前置 ...

  5. springBean生命周期----来自spring实战总结

    1.Spring对bean进行实例化 2.Spring将值和bean的引用注入到bean对应的属性中(比如说注入到被依赖的bean的方法中或属性里) 3.如果bean实现了BeanNameAware接 ...

  6. spring-bean生命周期之初始化和销毁的三种方式

    1,注解bean之指定init-method/destroy-method 这种方式spring注解之@Bean注解,这边再简单演示如下: 配置类中增加一个bean如下: /*** 定义一个bean对 ...

  7. 【Spring注解系列10】SpringBean的生命周期

    1.SpringBean生命周期定义 指bean创建---初始化----销毁的过程. 构造(对象创建): 单实例:在容器启动的时候创建对象 多实例:在每次获取的时候创建对象 初始化和销毁方式: 指定初 ...

  8. 一步步实现:springbean的生命周期测试代码

    1. 创建实体SpringBean public class SpringBean {private String username;public String getUsername() {retu ...

  9. springBean的生命周期 面试好记无废话

    springBean生命周期 实例化阶段 1.spring读取xml配置文件,容器就会调用doCreateBean方法进行实例化,底层是通过工厂+反射完成的创建 2.bean实例化后,进行bean对象 ...

  10. Spring IOC 容器启动、Bean生命周期详解

    前言 在Spring IOC 和 AOP 概览中,简要介绍了IOC容器和AOP,没有深入IOC容器Bean的实例化,此文承接上文深入分析Bean的实例化过程.生命周期. Spring IOC的过程 S ...

最新文章

  1. Node:非IO的异步API
  2. JS获取整个页面的文档
  3. linux下的open的注意事项
  4. 免费的定时任务托管 clock.sh
  5. java gc error_java.lang.OutOfMemoryError GC overhead limit exceeded原因分析及解决方案
  6. python软件不用买吗_Python 3.3+中的软件包不需要__init__.py吗
  7. gcc oracle mysql_[转]Windows下用GCC连接MySQL数据库
  8. 监控oracle某条sql语句,Oracle-常用监控SQL语句
  9. kafka报org.apache.kafka.common.errors.RecordTooLargeException
  10. python3数据科学入门与实战技巧_Python3数据科学入门与实战
  11. 雷军和董明珠的10亿赌局 什么来历
  12. 幻方解法之Strachey法生成双偶幻方
  13. 2023.02.07草图大师SU模型渲染- 效果图之加深颜色的色调
  14. 使用cmd命令笔记本电池查看电池寿命
  15. 2021最新! Springboot 2.X集成ElasticSearch 7.6.2(入门版)
  16. vscode无法连接扩展市场问题
  17. #include tchar.h 是什么意思
  18. 视频倒放怎么制作?视频倒放方法分享。
  19. 1970 matla 时间_在MATLAB中绘制时间序列数据
  20. python print 函数与print语句区别

热门文章

  1. 怎么修改服务器玩家等级级上限,GOM引擎等级限制了极限怎么办?传奇服务端突破等级限制的方法...
  2. my games / BF3 / GTA5 / NFS18 / sanguowushuang6 / RA2 / KOF97 / FIFA
  3. IDEA 炫酷编辑器主题大全,真的好看
  4. DRM之Widevine学习入门
  5. sql server插入语句
  6. 360+linux浏览器下载官网下载,360极速浏览器下载
  7. 【通信协议】IIC通信协议详解
  8. 行测中图形推理题的规律
  9. 【JVM实战】JVM参数调优
  10. 基于elementui的年月日周时间控件