专门注册了简书账号过来评论这篇文章。
文章总体写的面面俱到,但是有没有到深入到什么,给人的感觉是我看了,但是貌似很快又会忘掉。为啥?怎么破?
为啥?没有抓住重点
怎么破?讲核心
spring的核心工作原理就是利用反射机制,完成对象(bean)的注册和实例化。所以这里的重点就是:
- 在哪里注册对象定义?
- 如何注册?
- 如何完后,咋用?(实例化bean)
搞清这两个问题,对spring理解就会有更加宏观的把握。
第一个问题,主要看createApplicationContext。该方法主要解决spring bean去哪里注册问题,也就是解决容器问题。beanFactory是最顶级的容器抽象, DefaultListableBeanFactory是其具体的实现。
第二个问题, 主要看refreshContext。调用到的AbstractApplicationContext.refresh()里的invokeBeanFactoryPostProcessors(beanFactory)需要重点关注一下,因为它主要完成spring 环境里包括我们代码里定义的bean的定义的注册
第三个问题,可以给AbstractBeanFactory.doGetBean打个断点,看一下bean的实例化是怎么弄的
最后,为了检测自己的理解,写几个小demo,包括但不限于以下:
- 自定义的ApplicationListener
- 自定义的BeanFactoryPostProcessor
- 自定义的BeanPostProcessor
。。。
就这么多