@Configuration
@ComponentScan(“com.service”)
public class SpringDebugConfig {}
为了能够知道,我们要扫描那些包下的类,我们就必须先去解析配置类的BeanDefinition
,这样才能获取后续咱们要解析的包,当然这个方法不光解析了扫描的包,还解析了其他东西,本文不做讲解!
2.核心功能
好了,再往下走我们就知道了我们即将要扫描那些包下的类,让他变成bean,那么我们继续向下走,走到refresh();
这个方法不得了他是整个Springbean初始化的核心方法,了解了它也就能够了解Spring的实例化,回调等一些列的问题,我们进去看看:
进来之后,我们一个方法一个方法的分析做了什么功能,首先是:
1). prepareRefresh();
❝
这里是做刷新bean工厂前的一系列赋值操作,主要是为前面创建的Spring工厂很多的属性都是空的,这个方式是为他做一些列的初始化值的操作!
❞
2). obtainFreshBeanFactory()
❝
告诉子类刷新内部bean工厂 检测bean工厂是否存在 判断当前的bean工厂是否只刷新过一次,多次报错,返回当前使用的bean工厂,当该步骤为xml时 会新建一个新的工厂并返回
❞
3). prepareBeanFactory(beanFactory);
❝
这里是初始化Spring的bean容器,向beanFactory内部注册一些自己本身内置的Bean后置处理器也就是通常说的BeanPostProcessor,这个方法其实也是再初始化工厂!
❞
4). postProcessBeanFactory(beanFactory);
❝
允许在上下文子类中对bean工厂进行后处理,作用是在BeanFactory准备工作完成后做一些定制化的处理! 但是注意,你点进去是空方法,空方法以为着什么?意味着Spring的开发者希望调用者自定义扩展时使用!
❞
5). invokeBeanFactoryPostProcessors(beanFactory);
❝
其实相信看名字,大部分读者都能够猜出,他的目的是扫描非配置类的bd注册到工厂里面,扫描完成之后,开始执行所有的
BeanFactoryPostProcessors
,这里出现了第一个扩展点,自定义实现BeanFactoryPostProcessors
的时候,他的回调时机是在Spring读取了全部的BeanDefinition
之后调用的,具体的使用方法读者自行百度!❞
6). registerBeanPostProcessors(beanFactory);
❝
这里是注册bean的后置处理器 也就是 beanPostProcessor 的实现 还有自己内置的处理器 注意这里并没有调用该处理器,只是将胡处理器注册进来bean工厂! 不知道大家使用过
beanPostProcessor
接口这个扩展点吗?他就是再这个方法里面被注册到Spring工厂里面的,当然注意一下,他只是注册进去了,并没有执行!记住并没有执行!❞
7). initMessageSource();
❝
怎么说呢,这个方法作者并不准备深究,因为他和本篇文章的意图相违背,他的目的是做一个国际化操作也就是 i18n的资源初始化
❞
8).initApplicationEventMulticaster();
❝
Spring为我们提供了对于事件编程的封装,一般来说事件分为三个角色,
事件广播器
(发布事件),事件监听器
(监听事件),事件源
(具体的事件信息)三个角色,这个方法的目的就是初始化事件的广播器!❞
9). onRefresh();
❝
这里又是一个扩展点,内部的方法为空,Spring并没有实现它,供调用者实现!
❞
10). registerListeners();
❝
注册Spring的事件监听器,上面已经说过了,这里是初始化并且注册事件监听器
❞
11). finishBeanFactoryInitialization(beanFactory);
❝
这个方法是一个重点,他是为了实例化所有剩余的(非延迟初始化)单例。我们所说的bean的实例化,注入,解决循环依赖,回调
beanPostProcessor
等操作都是再这里实现的!❞
12). finishRefresh();
❝
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
最后
Java架构学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。
还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
[外链图片转存中…(img-elnYzdnp-1710414491582)]