專門注冊(cè)了簡(jiǎn)書(shū)賬號(hào)過(guò)來(lái)評(píng)論這篇文章。
文章總體寫的面面俱到,但是有沒(méi)有到深入到什么苟径,給人的感覺(jué)是我看了抱究,但是貌似很快又會(huì)忘掉焕刮。為啥邓馒?怎么破轿塔?
為啥特愿?沒(méi)有抓住重點(diǎn)
怎么破仲墨?講核心
spring的核心工作原理就是利用反射機(jī)制,完成對(duì)象(bean)的注冊(cè)和實(shí)例化揍障。所以這里的重點(diǎn)就是:
- 在哪里注冊(cè)對(duì)象定義目养?
- 如何注冊(cè)?
- 如何完后毒嫡,咋用癌蚁?(實(shí)例化bean)
搞清這兩個(gè)問(wèn)題,對(duì)spring理解就會(huì)有更加宏觀的把握兜畸。
第一個(gè)問(wèn)題努释,主要看createApplicationContext。該方法主要解決spring bean去哪里注冊(cè)問(wèn)題咬摇,也就是解決容器問(wèn)題伐蒂。beanFactory是最頂級(jí)的容器抽象, DefaultListableBeanFactory是其具體的實(shí)現(xiàn)肛鹏。
第二個(gè)問(wèn)題, 主要看refreshContext逸邦。調(diào)用到的AbstractApplicationContext.refresh()里的invokeBeanFactoryPostProcessors(beanFactory)需要重點(diǎn)關(guān)注一下,因?yàn)樗饕瓿蓅pring 環(huán)境里包括我們代碼里定義的bean的定義的注冊(cè)
第三個(gè)問(wèn)題龄坪,可以給AbstractBeanFactory.doGetBean打個(gè)斷點(diǎn)昭雌,看一下bean的實(shí)例化是怎么弄的
最后,為了檢測(cè)自己的理解健田,寫幾個(gè)小demo,包括但不限于以下:
- 自定義的ApplicationListener
- 自定義的BeanFactoryPostProcessor
- 自定義的BeanPostProcessor
。佛纫。妓局。
就這么多
lvlajzhao 評(píng)論自Spring Boot 啟動(dòng)過(guò)程分析