Spring------生命周期

转:https://blog.csdn.net/qq_42112846/article/details/81368862

如图所示:

一下就是对上图的解释:

Spring生命周期

1.先实例化Bean工厂后处理器(Bean工厂处理器的实例化是先于bean的实例化的)

(BeanFactoryPostProcessor)

该接口只有一个postProcessBeanFactory方法,将加载所有bean定义,但是还没有实例化bean。

2.实例化Bean后处理器(BeanPostProcessor)

主要是两个能力:

(1)检验bean状态是否有效;

(2)判断bean是什么接口,然后进行set属性。应该就是api里面说的检查标记接口;

此时,ApplicationContext 可以在它们的beans definitions自动检测BeanPostProcessor bean并且把这些bean应用于随后的bean创建。

3.实例化感知的bean后处理器适配器(InstantiationAwareBeanPostProcessorAdapter)

它可以去调用三个方法:

postProcessBeforeInstantiation方法(实例化Bean之前调用)这个返回的bean也许是一个代理代替目标bean,有效地抑制目标bean的默认实例化。

postProcessAfterInitialization方法(实例化Bean之后调用)主要是对已经实例化的bean进行一些处理,比如说:可能这个bean在早期已经实例化了又是单例,那么就销毁这个bean用原来的bean。

postProcessPropertyValues方法(设置某个属性时调用)这个方法是校验需要注入的属性是否有属性值,并为bean注入属性

4执行Bean构造器,bean正式实例化

在实例化之前会先去调用postProcessBeforeInstantiation方法

在实例化之后就去调用postProcessAfterInitialization方法

在这里实例化就是调用postProcessPropertyValues去为所要实例化的bean注入属性

注:此处使用到的是Bean后处理器适配器的方法。

5. 调用BeanNameAware接口

通过其中的setBeanName(String name)方法对工厂bean进行set name

6. 调用BeanFactoryAware接口

通过其中的setBeanFactory(BeanFactory beanFactory)方法对工厂bean进行set name

它会为bean实例提供所属工厂的回调。但是,是在普通的bean属性值填充之后,在初始化回调之前,从而获得所属的beanFactory并拷贝到本对象中。

作用:可以通过这个bean所属的beanFactory检查bean依赖的bean、beanClassLoader、互斥的单例等。

7.调用Bean后处理器的postProcessBeforeInstantiation方法对属性进行更改

8.调用InitializingBean.afterPropertiesSet() ,检查是否已经set所有必要属性,

之后调用<bean>的init-method属性指定的初始化方法

9. 调用Bean后处理器的postProcessAfterInitialization对属性进行更改

注:7、9用到的是Bean后处理器的方法。

后处理器适配器与后处理器的这两个方法分不同之处在于:

前者实在目标bean初始化之前之后调用,而后者实在任何bean实例化回掉之前之后使用

所以后处理器适配器的方法是先与后处理器的方法被调用

10.调用后处理器适配器的postProcessAfterInitialization

11. 容器初始化成功,使用bean

12. 调用DiposibleBean接口的DiposibleBean.destory()

被一个BeanFactory调用销毁一个实例对象

destroy-method调用<bean>的destroy-method属性指定的销毁方法

Spring------生命周期的更多相关文章

  1. spring生命周期

    Github地址 最近在整合mybatis-spring. 公司里面已经有一个叫做kylin-datasource的开发包,以前能够提供master和slave2个数据源,最近更新了2.0版本,支持自 ...

  2. 说下spring生命周期

    面试官:说下spring生命周期 程序员:不会 那你先回去等消息吧     Bean实现了BeanNameAware,Spring会将Bean的ID透传给setBeanName java.后端开发.程 ...

  3. Spring生命周期详解

    导读 Spring中Bean的生命周期从容器的启动到停止,涉及到的源码主要是在org.springframework.context.support.AbstractApplicationContex ...

  4. Spring学习总结(4)-Spring生命周期的回调

    参考文档:https://docs.spring.io/spring-framework/docs/current/spring-framework-reference/core.html#beans ...

  5. 【源码】spring生命周期

    一.spring生命周期 1. 实例化Bean 对于BeanFactory容器,当客户向容器请求一个尚未初始化的bean时,或初始化bean的时候需要注入另一个尚未初始化的依赖时,容器就会调用crea ...

  6. Spring生命周期 Constructor > @PostConstruct > InitializingBean > init-method

    项目中用到了 afterPropertiesSet: 于是具体的查了一下到底afterPropertiesSet到底是什么时候执行的.为什么一定要实现 InitializingBean; **/ @C ...

  7. spring 生命周期最详解

    转载. https://blog.csdn.net/qq_23473123/article/details/76610052 目的 在大三开始学习spring时,老师就说spring bean周期非常 ...

  8. spring生命周期流程图

    Spring作为当前Java最流行.最强大的轻量级框架,受到了程序员的热烈欢迎.准确的了解Spring Bean的生命周期是非常必要的.我们通常使用ApplicationContext作为Spring ...

  9. spring源码学习(四)-spring生命周期用到的后置处理器

    生命周期的九大后置处理器 第一次调用后置处理器org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory# ...

  10. 七、spring生命周期之初始化和销毁方法

    一.通过@Bean指定初始化和销毁方法 在以往的xml中,我们是这样配置的 <bean id="exampleInitBean" class="examples.E ...

随机推荐

  1. PHP爬虫

    使用PHP的curl扩展抓取页面数据 PHP的curl扩展是PHP支持的允许你与各种服务器使用各种类型的协议进行连接和通信的库. 本程序是抓取知乎的用户数据,要能访问用户个人页面,需要用户登录后的才能 ...

  2. 第九节 java7JDK的常用封装类型

    一.Java Scanner类 /初始化一个 scanner 对象. Scanner scanner = new Scanner(System.in); //判断语法 boolean b = scan ...

  3. phython安装

    点击   https://www.python.org/downloads/ 下载合适的Python版本 下载获取到:python-x.x.x.msi安装包,我们双击python-x.x.x.msi即 ...

  4. Centos下软件包管理

    目录 一.安装软件包的三种方法 二.rpm包介绍 三.rpm工具用法 四.yum工具用法 五.yum搭建本地仓库 六.yum更换国内源 七.yum下载rpm包 八.源码包安装 九.扩展 一.安装软件包 ...

  5. L330 Black hole picture captured for first time in space ‘breakthrough’

    Black hole picture captured for first time in space ‘breakthrough’ Astronomers have captured the fir ...

  6. asp.net mvc6+ef框架做的书籍管理项目

    效果图: 目录结构: book控制器代码: using System; using System.Collections.Generic; using System.Linq; using Syste ...

  7. 前台的url通过 ActionName?var1=xx&var2=yy 的形式传给特定action

    本文对自己开发的基于lucene和J2EE技术的搜索引擎开发经验进行简单总结.今后可能会从性能的角度总结lucene开发经验.当数据上TB级别后,分布式lucene以及结合分布式文件系统(如HDFS) ...

  8. xgboost中XGBClassifier()参数详解

    http://www.cnblogs.com/wanglei5205/p/8579244.html 常规参数 booster gbtree 树模型做为基分类器(默认) gbliner 线性模型做为基分 ...

  9. Spring @Resource,@Autowired,@Qualifier的注解注入和区别

    spring2.5提供了基于注解(Annotation-based)的配置,我们可以通过注解的方式来完成注入依赖.在Java代码中可以使用 @Resource或者@Autowired注解方式来经行注入 ...

  10. SG函数 2019- 杭师范校赛

    #include<bits/stdc++.h> using namespace std; ; int sg[maxn]; int f[maxn]; int s[maxn]; void ma ...