Spring源碼解析複習

1.spring中如何解決循環依賴問題?

首先我們來說一下什麼是循環依賴,所謂的循環依賴是指A類中有B類的屬性,而B類中包含A類的屬性。

spring中解決循環依賴有個前置條件,就是隻針對scope是singleton的類纔對循環依賴的問題給予解決,對prototype類型的不支持會拋出異常。spring在創建bean的時候,是不等bean創建完成就會將創建bean的objectFactory提前曝光,也就是將objectFactory加入到緩存中去,一但下一個bean創建的時候需要依賴上一個bean則直接使用objectFactory。

Spring在加載bean的時候都會首先去緩存中查找。

spring中加載bean時涉及到的緩存map的解釋如下:

singletonObjects:用於保存BeanName和創建bean實例之間的關係,bean name--->bean instance;

singletonFactories:用於保存beanName 和創建bean工廠之間的關係。bean name-->ObjectFactory;

earlySingletonObjects: 也是用於保存BeanName和創建bean實例之間的關係,不同的是,當一個單例bean被放在這裏面後,那麼當bean還在創建過程中,就可以通過getBean方法獲取到了,其目的是用來檢查循環引用。

registeredSingletons:用來保存當前所有已註冊的bean;

 

 

2.spring中的factoryBean接口。

spring提供了一個factoryBean的工廠類接口,用戶可以通過實現該接口定製實例化bean的邏輯。

其中有幾個方法:

1). T getObject():返回由FactoryBean創建的bean實例

2).boolean isSingleton();返回判斷bean的作用域是singleton還是prototype

3)Class<T> getObjectType():返回FactoryBean創建的bean類型

 

Notes:

BeanFactory 和 FactoryBean的區別

BeanFactory:spring IOC的接口,具體實現類有,DefaultListableBeanFactory、XmlBeanFactory、ApplicationContext等

 

FactoryBean:Bean接口,當生成某個bean所需要的配置比較複雜的時候,可以通過實現這個接口來生成Bean,通過對複雜的生成過程進行封裝可以方便的實現bean的生成。getObject方法獲取具體的bean,getObjject("beanName"),如果需要獲取FactoryBean在getObject("&beanName")

 

詳情參考:https://www.cnblogs.com/xingzc/p/9138256.html

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章