Spring InitializingBean 接口以及Aware接口实现的原理

关于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接口实现的原理的更多相关文章
- spring源码:Aware接口(li)
一.spring容器中的aware接口介绍 Spring中提供了各种Aware接口,比较常见的如BeanFactoryAware,BeanNameAware,ApplicationContextAwa ...
- spring源码:Aware接口
一.spring容器中的aware接口介绍 Spring中提供了各种Aware接口,比较常见的如BeanFactoryAware,BeanNameAware,ApplicationContextAwa ...
- 手写Spring,定义标记类型Aware接口,实现感知容器对象
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 同事写的代码,我竟丝毫看不懂! 大佬的代码,就像 "赖蛤蟆泡青蛙,张的丑玩 ...
- Spring扩展之五:Aware接口等
ApplicationContextAwareProcessor 1.介绍 ApplicationContextAwareProcessor是一个Spring内部工具,它实现了接口BeanPostPr ...
- Spring扩展点之Aware接口族
引言 Spring中提供了各种Aware接口,方便从上下文中获取当前的运行环境,比较常见的几个子接口有:BeanFactoryAware,BeanNameAware,ApplicationContex ...
- spring中的aware接口
1.实现了相应的aware接口,这个类就获取了相应的资源. 2.spring中有很多aware接口,包括applicationContextAware接口,和BeanNameAware接口. 实现了这 ...
- spring中一些aware接口
Spring中提供一些Aware相关接口,像是BeanFactoryAware. ApplicationContextAware.ResourceLoaderAware.ServletContextA ...
- 学习 Spring (五) Aware 接口
Spring入门篇 学习笔记 Spring 中提供了一些以 Aware 结尾的接口,实现了 Aware 接口的 bean 在被初始化之后可以获取相应资源 通过 Aware 接口,可以对 Spring ...
- Spring Aware接口
实现aware接口的bean必须在spring的xml文件中注册,由spring的IOC容器管理 1-ApplicationContextAware接口 可以获取spring的IOC容器 2-Bean ...
随机推荐
- PythonStudy——函数的使用 Use of functions
# print(a) # a = 10 # 注意:函数必须先定义,后使用 # print(get_water) def get_water(water, money): print('收入你的%d元钱 ...
- 统一社会信用代码+组织机构代码 校验 python
转自: https://blog.csdn.net/warrah/article/details/69338912 https://blog.csdn.net/qq_37142340/article/ ...
- oracle-pl/sql之三
集合与记录 set serveroutput on create or replace package my_types authid definer is type my_rec is record ...
- awk命令过滤tomcat的访日日志中IP地址
1. 命令如下 批量过滤日志文件,grep -v是要排除10网段开头的IP地址 sort会自动按ip排序 uniq -c去重并计数 sort -n 按数值从小到大排序 [root@linux-node ...
- 2.3 Visio画虚线后插入word或PPT变为实线
选中实线后,左键选择->格式->线条->粗细->自定义->设置为0pt
- 【动态规划】最大连续子序列和,最大子矩阵和,最大m子段和
1.最大字段和问题 求一个序列最大连续子序列之和. 例如序列[-1,-2,-3,4,5,-6]的最大子段和为4 + 5 = 9. ①枚举法 int MaxSum(int n,int *a){ int ...
- 在他机上还原DB2的备份
在服务器获取得到db2的备份文件,拷贝到d盘db2_backup目录下面 在windows下的时间戳标记为时间目录名+文件名.001前面的 "2014022\0001006.001" ...
- nginx支持ipv6
今天碰到的问题是nginx对于ipv6的请求没有日志,顺便查了一下,nginx对ipv6的支持. nginx -v查看nginx是否支持ipv6,出现--with-ipv6,则是支持nginx的,否则 ...
- [UE4]Scroll Box带滚动条的容器
一.黑边,当可以往下滚动的时候,下边会出现黑边.当可以往上滚动的时候,上边也会出现黑边. Scroll Box.Style.Style:也可以自定义上下左右黑边的样式: 二.Scroll Box. ...
- 涨知识:equals 和 == 你真的了解吗?
基本概念 ==是运算符,比较的是两个变量是否相等: equals()是Object方法,用于比较两个对象是否相等 看一下源码: public boolean equals(Object anObjec ...