关于Spring InitializingBean 接口以及Aware接口实现的其实都在

第11步中;

finishBeanFactoryInitialization() 方法中完成了3部分的内容:

1.完成对单例的非懒加载的bean 进行初始化

2.对于InitializingBean 接口 spring 会自动调用它的 afterPropertiesSet方法;

3.还进行了对实现了Aware 接口实现的调用

多说无益,我们来看一看,它是怎么完成初始化,以及接口的调用;

a:  第一步肯定是我们的入口refresh()方法:我们进入 finishBeanFactoryInitialization()中

b: 我们进入实例化的方法中: beanFactory.preInstantiateSingletons();

c : 就是创建bean 的方法:我们点进去瞧瞧

d :经过doGetBean (),我们需要去看createBean()实现

e :关键的步骤来了,所有的方法都在createBean()中实现,实现类是AbstractAutoWrieCapableBeanFactory() 中,有很多有用的方法;

f:继续调用doCreateBean();

g: 对bean 的实例化。具体你们可以去往下点,通过反射实例化对象

h :在初始化成功后,就开始检测这个bean 是否实现了InitializingBean 以及Aware接口;就是这个initializeBen()

我们点进去看看。主要两个方法:  

  (1),invokeAwareMethods():调用实现了Aware 接口的方法;

  (2), invokeInitMethod(): 调用实现InitializingBean 的方法:

我们看一看Aware 接口的调用实现:

InitializingBean 接口调用实现:会调用afterPropertiesSet()方法:

    哈哈,在Springmvc中RequestHandlerMapping() 的URL注册就是这么实现的

从这个顺序也可以看粗:Aware 先执行后是InitializingBean

好了,有没有了解呢?

Spring InitializingBean 接口以及Aware接口实现的原理的更多相关文章

  1. spring源码:Aware接口(li)

    一.spring容器中的aware接口介绍 Spring中提供了各种Aware接口,比较常见的如BeanFactoryAware,BeanNameAware,ApplicationContextAwa ...

  2. spring源码:Aware接口

    一.spring容器中的aware接口介绍 Spring中提供了各种Aware接口,比较常见的如BeanFactoryAware,BeanNameAware,ApplicationContextAwa ...

  3. 手写Spring,定义标记类型Aware接口,实现感知容器对象

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 同事写的代码,我竟丝毫看不懂! 大佬的代码,就像 "赖蛤蟆泡青蛙,张的丑玩 ...

  4. Spring扩展之五:Aware接口等

    ApplicationContextAwareProcessor 1.介绍 ApplicationContextAwareProcessor是一个Spring内部工具,它实现了接口BeanPostPr ...

  5. Spring扩展点之Aware接口族

    引言 Spring中提供了各种Aware接口,方便从上下文中获取当前的运行环境,比较常见的几个子接口有:BeanFactoryAware,BeanNameAware,ApplicationContex ...

  6. spring中的aware接口

    1.实现了相应的aware接口,这个类就获取了相应的资源. 2.spring中有很多aware接口,包括applicationContextAware接口,和BeanNameAware接口. 实现了这 ...

  7. spring中一些aware接口

    Spring中提供一些Aware相关接口,像是BeanFactoryAware. ApplicationContextAware.ResourceLoaderAware.ServletContextA ...

  8. 学习 Spring (五) Aware 接口

    Spring入门篇 学习笔记 Spring 中提供了一些以 Aware 结尾的接口,实现了 Aware 接口的 bean 在被初始化之后可以获取相应资源 通过 Aware 接口,可以对 Spring ...

  9. Spring Aware接口

    实现aware接口的bean必须在spring的xml文件中注册,由spring的IOC容器管理 1-ApplicationContextAware接口 可以获取spring的IOC容器 2-Bean ...

随机推荐

  1. lua qt測試成功

    用luabind寫了一個qt的簡單binding 測試成功

  2. Excel函数之vlookup的用法

    Vlookup函数用法: 实例: 要将编号对照表中的图书名称根据两表中的图书编码字段引入 订单明细中. Vlookup函数 参数一:键入一个需要搜索的字段,这里需要通过订单明细中的图书编号在编号对照离 ...

  3. 第一个Unity3D脚本

    学习就该简单粗暴,看了一天Unity3d的教程加文档,尝试一个小练习,再快速写个博客加深印象. 一:首先建立一个空白工程,创建一个空GameObject,在Assets Pannel中创建一个名为Le ...

  4. 基础:位(bit)、字节(byte)、字符、编码之间的关系

    1.位: 数据存储的最小单位.每个二进制数字0或者1就是1个位: 2.字节: 8个位构成一个字节:即:1 byte (字节)= 8 bit(位): 1 KB = 1024 B(字节): 1 MB = ...

  5. 对中断interrupt的理解

    一.中断 线程的几种状态:新建.就绪.运行.阻塞.死亡.参考:线程的几种状态转换 线程的可运行状态并不代表线程一定在运行(runnable != running ) . 大家都知道:所有现代桌面和服务 ...

  6. HTML的day1 HTML的标签

    a标签和锚点 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  7. TabLayout+ViewPager 标题不显示问题

    第一次用TabLayout+ViewPager 组合在布局中写好了三个标题预览没问题而且也设置了 app:tabIndicatorColor="@color/colorAccent" ...

  8. ubuntu下的Nessus插件更新

    00x1: 记录下nessus插件离线更新,免得每次度娘我Nessus是放在虚拟机里面. 00x2: nessus 插件更新地址: https://plugins.nessus.org/v2/offl ...

  9. 开源ERP系统Odoo搭建文档

    本文参考链接地址: https://devecho.com/v/209/ https://www.cnblogs.com/wxylog/p/6386974.html 什么是Odoo 为什么选择Odoo ...

  10. 涂抹mysql笔记-搭建mysql高可用体系

    mysql的高可用体系<>追求更高稳定性的服务体系 可扩展性:横向扩展(增加节点).纵向扩展(增加节点的硬件配置) 高可用性<>Slave+LVS+Keepalived实现高可 ...