以代码流程方式探索Spring源码(十)--Bean实例化4--initializeBean--实例化及依赖注入后的初始化方法

以代码流程方式探索Spring源码--Bean实例化4--initializeBean--实例化及依赖注入后的初始化方法

入口

在该方法中只要有三部分:
1、各种Aware的调用
2、各种初始化方法的调用
3、各种BeanPostProcessor的调用
在这里插入图片描述

对普通Aware的调用

在这里插入图片描述
在这个地方主要对三种Aware接口进行对应的set方法调用。
1、BeanNameAware
2、BeanClassLoaderAware
3、BeanFactoryAware
在自己写的类中集成这几种接口实现其中的set方法可以获取BeanName、BeanClassLoader和BeanFactory,执行的地方就是在这里。
在这里插入图片描述

Bean初始化前对BeanPostProcessor的一些调用

在这里插入图片描述
注释是对 postProcessBeforeInitialization() 方法的调用。
在这里插入图片描述
对于Aware接口的调用从下图总可以看出来:
1、EnvironmentAware
2、EmbeddedValueResolverAware
3、ResourceLoaderAware
4、ApplicationEventPublisherAware
5、MessageSourceAware
6、ApplicationContextAware
在这里插入图片描述
分别调用对应的set方法
在这里插入图片描述
此处还有对ImportAware的处理,后续会单独讨论:
在这里插入图片描述
还有对servlet相关Aware的处理:
在这里插入图片描述
还有对@Construct注解的方法的调用,这是三种bean初始化方式中执行最早的方法:
此处的LifecycleMetadata就是之前在注解收集阶段已经收集并存放缓存中了,此处直接取用。
在这里插入图片描述

正儿八经的初始化方法

在这里插入图片描述
这块就是另外两种初始化方式的对应方法的调用:
1、实现了InitializingBean接口并重写了afterPropertiesSet()方法
2、使用XML或者注解的方式直接定义了init-method() 方法
在这里插入图片描述
到此为止,三种初始化方式都已经现身了,从源码中也可以看出它们执行的顺序:
@PosrConstruct方法 > 实现InitializingBean接口方式 > 配置了init-method 方式

初始化后的BeanPostProcessor的一些调用

在这里插入图片描述
这块调用的对应方法就是postProcessAfterInitialization()
在这里插入图片描述
最重要的一个是动态代理的生成,这个之后会细细讨论
在这里插入图片描述
还有常用的@Scheduled注解的解析
在这里插入图片描述
有以下几种情况:
1、配置了cron表达式
在这里插入图片描述
2、配置了fixedDelay或者fixedDelayString
在这里插入图片描述
3、配置了fixedRate或者fixedRateString
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值