对于学习Spring源码的感悟
最近有在回看Spring源码。
之所以要看Spring源码,是因为Spring占据了Java的半边天。(学了Spring源码,咱能装啊。)
看Spring源码的过程中,可以看看这些顶尖攻城狮是怎么敲代码的。
Spring的运用更加熟练了。Spring的一些高级知识点也知道了部分。
学了Spring源码,在服务器启动的时候,报有关Spring的错,最起码知道个大概。
Spring提供了一些扩展接口,可以满足部分需求,可以实现编码解耦。
---------------------------------------------------------------------------------------------
Spring提供的扩展接口有aware接口、后置处理器、InitializingBean和DisposableBean、事件机制。这些可扩展的接口主要分两类,一类是针对单个Bean、另一类是针对容器。具体需求,具体分析吧。
针对单个Bean,BeanNameAware、BeanPostProcessor、InitializingBean和DisposableBean。
针对容器,ApplicationContextAware、BeanFactoryPostProcessor、Spring提供的5种标准事件机制。
---------------------------------------------------------------------------------------------
知道了Spring提供了可扩展的接口,也简单进行了分类,当然最主要的是要知道这些接口的作用。
Aware接口提供了Bean对容器对感知
容器管理的Bean一般不需要了解容器的状态和直接使用容器,但在某些情况下,是需要在Bean中直接对IOC容器进行操作的,这时候,就需要在Bean中设定对容器的感知。Spring IOC容器也提供了该功能,它是通过特定的aware接口来完成的。BeanPostProcessor
BeanPostProcessor,可以在spring容器实例化bean之后,在执行bean的初始化方法前后,添加一些自己的处理逻辑。
实现BeanFactoryPostProcessor接口,可以在spring的bean创建之前,修改bean的定义属性。InitializingBean和DisposableBean
当需要在bean的全部属性设置成功后做些特殊的处理,可以让该bean实现InitializingBean接口。
当需要在bean销毁之前做些特殊的处理,可以让该bean实现DisposableBean接口,该接口也只定义了一个destory方法。
---------------------------------------------------------------------------------------------
在最后,还是需要知道这些接口的加载顺序。在SpringBean生命周期里,doCreateBean() 方法主要干三件事情:
1. 实例化 bean 对象:createBeanInstance()
2. 属性注入:populateBean()
3. 初始化 bean 对象:initializeBean()
而初始化 bean 对象时也是干了三件事情:
1. 激活 Aware 方法
2. 后置处理器的应用
3. 激活自定义的 init 方法
---------------------------------------------------------------------------------------------
最最后,回看文章,发现还是缺了一些环节。各位大佬补脑吧。
扫描二维码
获取更多精彩
王猴卖瓜