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 ...
随机推荐
- phpmyadmin nginx设置
1,解压缩phpmyadmin4.2.8压缩包到/usr/local/phpMyAdmin 2,复制config.sample.inc.php为config.inc.php 3,修改nginx.con ...
- Spring事务原理
Spring事务的本质是对数据库事务的封装支持,没有数据库对事务的支持,Spring本身无法提供事务管理功能.对于用JDBC操作数据库想要用到事务,必须经过获取连接——>开启事务——>执行 ...
- istream不是std的成员
如果报错信息为:istream不是std的成员,那么有两种可能 1.没有包含iostream库文件 2.#ifndef 和#endif使用错误,致使包含的iostream的头文件没有被主函数包含
- 【java】设计模式-单例设计模式
单例设计模式:解决一个类在内存中是存在一个对象的问题.当需要该事物的对象在内存中唯一时,将以下三步添加即可. 思想:想要保证对象唯一1.为了避免其他程序过多的建立该类对象,先禁止其他程序建立该类对象2 ...
- gcc centos 新版本的安装方法
因为centos默认安装的gcc是GCC 4.*.* 是不支持 C++11 的,所以有些新的程序或软件要安装就行要升级GCC,否则无法编译通过 一.如下步骤安装不成功(yum install devt ...
- SQL 第一范式、第二范式、第三范式、BCNF范式
一.第一范式 1NF 要求:每一个分量必须是不可分的数据项. 特点: 1)有主键,且主键不能为空. 2)字段不能再分. 示例:(以下例子 不满足 第一范式) /*学号 年龄 信 ...
- npm cnpm
npm 1.说明: npm(node package manager)是nodejs的包管理器,用于node插件管理(包括安装.卸载.管理依赖等) 2.使用npm安装插件:命令提示符执行npm ins ...
- lavarel 中间件
创建中间件 php artisan make:policy UserPolicy 所有生成的授权策略文件都会被放置在 app/Policies 文件夹下. 让我们为默认生成的用户授权策略添加 upda ...
- Hexo-Next6.7.0主题优化
Hexo-Next6.7.0主题优化 效果预览:Next6.7.0主题个人博客 一.下载next主题 $ cd your-hexo-site $ git clone https://github.co ...
- Docker系列08:容器监控
1 监控解决方案 cadvisor+influxdb+grafana cAdvisor:Google开源的工具,用于监控Docker主机和容器系统资源,通过图形页面实时显示数据,但不存储:它通过宿主机 ...