專門注冊了簡書賬號過來評論這篇文章。
文章總體寫的面面俱到,但是有沒有到深入到什么,給人的感覺是我看了,但是貌似很快又會忘掉。為啥?怎么破?
為啥?沒有抓住重點
怎么破?講核心
spring的核心工作原理就是利用反射機制,完成對象(bean)的注冊和實例化。所以這里的重點就是:
- 在哪里注冊對象定義?
- 如何注冊?
- 如何完后,咋用?(實例化bean)
搞清這兩個問題,對spring理解就會有更加宏觀的把握。
第一個問題,主要看createApplicationContext。該方法主要解決spring bean去哪里注冊問題,也就是解決容器問題。beanFactory是最頂級的容器抽象, DefaultListableBeanFactory是其具體的實現(xiàn)。
第二個問題, 主要看refreshContext。調(diào)用到的AbstractApplicationContext.refresh()里的invokeBeanFactoryPostProcessors(beanFactory)需要重點關注一下,因為它主要完成spring 環(huán)境里包括我們代碼里定義的bean的定義的注冊
第三個問題,可以給AbstractBeanFactory.doGetBean打個斷點,看一下bean的實例化是怎么弄的
最后,為了檢測自己的理解,寫幾個小demo,包括但不限于以下:
- 自定義的ApplicationListener
- 自定義的BeanFactoryPostProcessor
- 自定義的BeanPostProcessor
。。。
就這么多