大致步骤

简单来说: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. Python变量作用域问题
  2. Python3--批量爬取数据之调用有道api进行翻译
  3. 如何在Hadoop上编写MapReduce程序
  4. Python:非常详细的解释如何判断某个变量的类型以及代码实现
  5. 用jsp实现登录界面
  6. LeetCode:Sudoku Solver Valid Sudouku
  7. WPF 模仿IconPacks库写图标按钮
  8. 在Windows中为文件添加“可执行”权限(chmod +x 文件名 不起作用)
  9. 可靠性测试设备技术含量_品牌手机厂商为何如此重视可靠性测试,海拓仪器一语道破玄机...
  10. Redis-主从配置
  11. 007. VMware 创建共享文件夹
  12. Java基础篇:带自变量的构造函数
  13. FFmpeg采集树莓派USB摄像头(UVC摄像头)
  14. Hello!GitHub 好用好玩值得收藏的开源项目集合~
  15. Photoshop CS2 视频教程-PS合并图层(转)
  16. 在多台终端设备的i茅台应用中,实现同时自动化预约X酒的解决方案
  17. CCRC信息安全服务资质申请流程详解
  18. 【Android开发日记】jsonObject = new JSONObject(info)报错 A JSONObject text must begin with '{' at character
  19. 国外LEAD域名邮箱获取途径
  20. 单片机自制时钟(年月日星期时分秒显示、按键校准)

热门文章

  1. 抗衰老秘方盘点:枸杞子可养肝防衰老
  2. 关于cmd打开时提示“系统找不到指定的路径”问题
  3. 上海电气“星云智汇”工业互联网平台
  4. 2022最新软件测试面试题
  5. CISCO-路由器交换机密码恢复
  6. 学习java web感想_学了近一个月的java web 感想
  7. 基于ZigBee 的多点温度采集系统设计与实现
  8. 最新-安装Windows与Ubuntu双系统
  9. Install Mercury MW150US WIFI dongle on RPi
  10. 白苹果如何制作自己的OS X 10.9“巨浪”可引导系统安装盘?