大致步骤

简单来说:Bean会经历四个阶段: 实例化–》属性赋值–》初始化–》销毁

具体来说:

  1. 实例化:new xxx();有两个时候会触发实例化:

    • 像容器申请一个Bean的时候
    • 当容器在初始化一个Bean的时候,发现该Bean还依赖另一个Bean。(在BeanDefinition中找到)
  2. 设置对象属性:通过BD找到Bean需要注入的一些属性,并注入,当发现依赖另一个对象时,触发另一个对象的实例化。

  3. 处理Aware接口:Spring会检测对象是否实现了XxxAware接口,如果实现了,就会调用对应的方法。例如BeanNameAware(对BeanName进行设置)、BeanClassLoaderAware(传入一个自定义类加载器)、BeanFactoryAware(扩展BeanFactory)

  4. BeanPostProcessor的前置处理。

  5. initializingBean: Spring检测对象如果实现了这个接口,就会执行他的afterPropertiesSet()方法,定制初始化逻辑。

  6. init-method:,如果Spring发现Bean实现了这个属性,就会调用他的配置方法,执行初始化逻辑。或者使用注解

  7. BeanPostProcessor的后置处理

    到目前位置,Bean的创建过程就完成了,可以正常使用了。

  8. DisposableBean:当Bean实现了这个接口,在销毁前就会调用destory()方法

  9. destory-method:销毁方法,可以进行内存回收,通过@PreDestory注解

各个接口介绍

1.什么是BeanDefinition?

​ BeanDefinition 是定义 Bean 的配置元信息接口

  • Bean 的类名
  • 设置父 bean 名称
  • Bean 行为配置信息,作用域、自动绑定模式、生命周期回调、延迟加载、初始方法、销毁方法等
  • Bean 之间的依赖设置,dependencies
  • 构造参数、属性设置

2.Aware接口

该接口是一个标识接口,具体的方法需要子类自己去实现。

​ Aware类型的接口的作用就是让我们能够拿到Spring容器中的一些资源。基本都能够见名知意,Aware之前的名字就是可以拿到什么资源,例如BeanNameAware可以拿到BeanName,以此类推。调用时机需要注意:所有的Aware方法都是在初始化阶段之前调用的!

3.BeanPostProcessor

​ 做通知。

4.initializingBean

​ afterPropertiesSet这个方法可以用在一些特殊情况中,也就是某个对象的某个属性需要经过外界得到,比如说查询数据库等方式,这时候可以用到spring的该特性,只需要实现InitializingBean即可

5.init-method

用来替代继承 InitializingBean接口

Spring创建Bean的流程相关推荐

  1. Spring源码系列(十二)Spring创建Bean的过程(二)

    1.写在前面 上篇博客主要Spring在创建Bean的时候,第一次调用的Bean的后置处理器的过程,同时笔者也打算将整个Spring创建的Bean的过程,通过这个系列,将Bean的创建过程给讲清楚,废 ...

  2. 通过Debug带你详细了解Spring创建Bean的过程,一清二楚!

    Spring流程Debug 1.1 Spring测试环境搭建 Spring模块概览,绿色是模块,Spring中八大模块,黑色表示该模块包含的jar包(组件).例如我们想要用IOC容器,也就是绿色的Co ...

  3. Spring创建Bean的3种方式

    1. Spring创建Bean的三种方式 1. 调用构造器(因为常用就不讲) 2. 调用静态工厂方法 3. 调用实例工厂方法 2. 使用静态工厂方法 1.此时<bean.../>元素要指定 ...

  4. Spring创建Bean的基本步骤

    最简单的spring创建Bean主要分为以下几个步骤: 加载Class类 调用构造方法 设置属性 回调Aware(BeanNameAware, BeanFactoryAware) 回调初始化方法(In ...

  5. Spring5——(一)spingIOC(入门介绍,spring创建bean,依赖,注入,注解方式)

    为什么要有框架? (1)对于web层来说,一个大型的程序往往需要编写大量的servlet,并且取值封装会非常繁琐. (2)对于dao层,要编写大量的sql语句,对于结果的解析也很麻烦,并且sql的复用 ...

  6. spring创建bean模式singleton与prototype的区别

    spring 创建bean有单例模式(singleton)和原始模型模式(prototype)这两种模式. 在默认的情况下,Spring中创建的bean都是单例模式的(注意Spring的单例模式与Go ...

  7. Spring创建Bean的三种方式的使用和区别

    在学习Spring的时候,发现Spring的IOC(控制反转)为我们提供的三种创建Bean的方式. 1.Spring创建Bean的三种方式 这里采用XML配置,分别演示三种创建Bean的方式和代码. ...

  8. Spring创建Bean的全过程Debug,没人能说的这么通透了

    作者:x1aoda1 https://www.cnblogs.com/darope/p/13917264.html 1.1 Spring测试环境搭建 Spring模块概览,绿色是模块,Spring中八 ...

  9. Spring 创建Bean的三种方式

    创建Bean的三种方式 第一种方式:使用默认构造函数创建. 在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时.采用的就是默认构造函数创建bean对象,此 ...

最新文章

  1. nsTimer的简单用法
  2. vim 初学简单设置
  3. 用户控件的后台代码关联使用CodeBehind还是CodeFile
  4. python购物车程序-Python编写购物车程序
  5. 1 HBase 介绍
  6. OpenCASCADE:拓扑 API之3D模型周期性
  7. python 怎么安装电脑摄像头模块_Python模块及安装
  8. Qt工作笔记-三种方式解决Qt5中文编码问题
  9. PubMedQA生物医学研究问题解答数据集(2019)下载
  10. c# 如何读取和写入ini(配置文件)
  11. 《健康报》携手健康之路帮助医院医生免费搭建微官网
  12. ZStack 3.6.0发布:支持云主机从KVM云平台在线迁移至ZStack
  13. java 四级联动,省市区镇四级联动附代码和数据库
  14. unity3D数据的本地存储(xml的方式)
  15. 谭浩强C++ 第八章
  16. 模块递归拆分法: 设计模式 设计原则,复杂层次设计举例。系统重构 装饰模式,门面模式,代理模式
  17. js 滚动显示获奖名单
  18. 统计学名词解释 —— 2. 什么是「总体」和「样本」
  19. 分享一个看起来挺酷眩的canvas做的粒子漩涡
  20. Python之数据分析(三维立体图像、极坐标系、半对数坐标)

热门文章

  1. ActiveMQ详细的介绍
  2. 所需即所获:IDE = _plugins_ + vim
  3. RabbitMQ ACK消息确认机制 快速入门
  4. 西门子S71200连接多功能电表
  5. 计算机管理用房设置要求,综合医院建筑规范(放射科用房)
  6. 【Android开发VR实战】二.播放360°全景视频
  7. 使用FFMPEG库封装264视频和acc音频数据到MP4文件中
  8. 蓝海彤翔执行副总裁张加廷接受【联播苏州】独家专访
  9. OneNET物联网平台介绍
  10. github 下载文件加速 https://moeyy.cn/gh-proxy/