1 開始
?
這是一個總圖
下邊慢慢看
?我們最基礎的寫的方式就是xml的方式去寫
?像這樣,
而我們會通過applicationContext的方式去獲得我們的bean ,我其中一篇博客就寫到了applicationContext他的父類就是beanFactory
?但是中間的是怎么樣處理的呢?
?因為你獲取getbean 的時候要么是bean.class 要么就是這個? bean的名字。所以思考應該是在容器中用map去存放的這個bean。和我們創建bean的一些東西,等等
?
我們可以知道,我們可以通過xml和properties 還有yaml定義一些bean定義信息(雖然我們很少將bean的定義信息寫成properties和還有yaml文件)但是 其實這些文件解析成bean的時候會解析成統一的beanDefinition。這時候會有一個解析處理環節。 而這個解析環節有一個解析處理環節就是beanDefinitionReader。然后beanDefiniton會通過反射去實例化。
bean工廠是一個容器的跟接口和入口 ,反射的代碼也是在bean工廠搞的
bean工廠就是一個核心容器
?我么需要postProcessor? 后置處理器。
?
?我們拿到beanfactory之后進型增強,你的那個 ,還有上邊的那個動態修改屬性值的問題。
我們就有一個placeholder(占位符)處理的接口。
?
?在源碼中經常會遇到一個populate的方法,這個方式其實就是填充屬性的
Aware 接口講解一下:
我想讓a對象有一個獲得當前容器的這樣一個功能沒那莫我就讓他a這個類趨勢實現applicationcontextaware接口,并實習其中的方法就行如
? 然后在提供一個get方法就ok了。
比如說我需要知道我的beanname這時候我就可以繼承beannameaware
需要框架啥組件就實現對應得aware接口就行。
你做二次開發得時候這時候就需要了
在這個方法里邊就會有一個方法
?
AbstractApplicationContext 有這么一個抽象類,其中有一個方法叫reflash。
里邊有
?各種忽略,那么這一塊呢還能不僅能忽略接口還能忽略類型。這里有了解即可以后在說。
beanpostpocesser 這里有個前之有個后置,兩個方法,他有一個實現類,????
走到最后,你會看到
所以這一塊就是aop 。
?這個圖就是說明了最簡單的bean創建,僅僅是bean創建時是怎么可以擴展的那一部分。不完整
?
1結束
?2開始
?
?這個順序為啥是這樣得????????
?人家就是這莫遵循得,所以在學tomcat源碼得時候好像也是這樣,一層一層得都去遵循了自己得這個生命周期。
那么在bean初始化時候如上上圖,我們不是知道他分為幾個階段嗎?在每個階段完成之后我們就讓他輸出他已經完成了。那么這個工作怎么做,這就需要 觀察者模式了
?一些重點得接口
還有一個beanDefinitionRegister 這個主要是對beandefinition增刪改查得 。
一個小小得面試題
首先,Spring 里面的核心功能是 IOC 容器,所謂 IOC 容器呢,本質上就是一個 Bean
的容器或者是一個 Bean 的工廠。
它能夠根據 xml 里面聲明的 Bean 配置進行 bean 的加載和初始化,然后 BeanFactory
來生產我們需要的各種各樣的 Bean。
BeanFactory 是所有 Spring Bean 容器的頂級接口,它為 Spring 的容器定義了一
套規范,并提供像 getBean 這樣的方法從容器中獲取指定的 Bean 實例。
BeanFactory 在產生 Bean 的同時,還提供了解決 Bean 之間的依賴注入的能力,
也就是所謂的 DI。
FactoryBean 是一個工廠 Bean,它是一個接口,主要的功能是動態生成某一個類型的
Bean 的實例,也就是說,我們可以自定義一個 Bean 并且加載到 IOC 容器里面。
它里面有一個重要的方法叫 getObject(),這個方法里面就是用來實現動態構建 Bean
的過程。
Spring Cloud 里面的 OpenFeign 組件,客戶端的代理類,就是使用了 FactoryBean
來實現的。
a是由afactiorybean調用getobject生成得
容器創建得時候不會有a ,他不會遵循bean得生命周期。
?
?感悟
學習接口得作用,以及他設計得思想。
2結束
?