springBean整理(一),不為別的,只為面試嗎
一.首先了解 Spring容器(IOC)
1.1ClassPathXmlApplicationContext 與 AnnotationConfigApplicationContext兩
個獲取IOC容器的區別
ClassPathXmlApplicationContext
基於XML元配置,初始化應用上下文
AnnotationConfigApplicationContext
基於Java元配置,初始化應用上下文
** 1.2Spring容器(IOC)容器初始化過程**
上圖是根據spring原始碼來具體分析的,只看這張圖其實剛瞭解spring容器的小夥伴不能快速掌握,下面我根據自己學習的結果具體來談談我對spring容器啟動載入的一些體會,希望可以幫助到大家
1.先談談springIOC,他就是控制翻轉,是一種思想具體實現就靠依賴注入(DI)
2.springIOC大概分為幾個步驟,在這之前我想想一些框架springMVC,等啟動過程中都要載入配置檔案或者註解等,這些都相當於把檔案或者.class先讀取到jvm中…然後進行一些預操作什麼的,在進行一些核心的Handler擴充套件(AOP)例項化等;
3我大概解說一些spring容器啟動步驟
1)通過BeanDefinitionReader驗證解析載入xml,配置類,Annotation,等其他方式的類 (BeanDefinitionReader有xml解析,還有註解的read)載入到BeanDefinition這個容器中(map)
2) 載入到bd中後可以通過BeanFactoryPostProcessor這個擴充套件對bd中的class進行修改
3)容器後處理器BeanPostProcessors 會在具體事例化bd中的bean過程中穿插執行,
4)通過反射根據根據BD資訊獲取合適的Constructor例項化早期物件
5)進行依賴注入例項的屬性
6)根據BD配置呼叫例項init-method方法
7)事件傳播器(釋出和接收定製的事件就是一個監聽器)
8)生命週期LifeCycle介面
二.SpringBean生命週期講解
bean的生命週期理解
就是容器在載入過程中bean例項化過程
大概分為幾個步驟
1)驗證一下BD中的資訊
2)通過bd中的資訊通過反射生成早期物件包裝成一個objectFactory物件放入一級快取
3)進行屬性注入
注:屬性注入會有迴圈依賴注入問題,spring只能解決set迴圈依賴問題,原型依賴無法解決會拋異常,主要是通過一個map中有沒有正在建立的物件來判斷是不是原型依賴或者單例依賴,如果有就拋異常;
4)呼叫init-method方法
5)中間會穿插後bean處理器,aop加強
6)構建成功後放入到單例池中,清除掉二級三級快取中的早期物件
注:bean例項化過程中為啥要三級快取來解決迴圈依賴問題而不用二級快取解決呢?
這塊主要是aop動態代理生成的物件和剛開始bean反射生成的早期物件不是一個,會在棧中有兩個,會有兩個不同的地址,所以需要二級和三級快取完成動態代理aop加強操作
三.FactoryBean 與BeanFactory
BeanFactory:工廠類介面,Spring容器的核心介面,例項化bean、配置bean之間的依賴關係
FactoryBean:例項化bean過程比較複雜時可以考慮使用
api
public interface FactoryBean<T> {
//返回的物件例項
T getObject() throws Exception;
//Bean的型別
Class<?> getObjectType();
//true是單例,false是非單例 在Spring5.0中此方法利用了JDK1.8的新特性變成了default方法,返回true
boolean isSingleton();
}`
相關文章
- 分享一個作為面試官的面試思路面試
- 面試官:"Handler的runWithScissors()瞭解嗎?為什麼Google不讓開發者用?"面試Go
- 面試官瘋了嗎,問我為什麼浮點數不精確?面試
- 面試:你知道為什麼會有 Generator 嗎面試
- Java面試題:為什麼HashMap不建議使用物件作為Key?Java面試題HashMap物件
- 測試只適合作為職業短期跳板,不適合做長期職業?
- array_diff_uassoc 那些不為人知的一面
- 面試整理面試
- 邦芒面試:為什麼你的面試沒回音?逃不過這8種情況面試
- 英特爾不為人知的 B 面
- 別傻了!不能只會給別人開熱點,要嘗試華為手機的WiFi分享功能WiFi
- 你真的認為Google翻譯不影響"前端"頁面功能嗎?Go前端
- 面試官:為什麼 Java 不把基本型別放在堆中?我竟然答不上來。。面試Java型別
- PHP面試整理PHP面試
- vue面試整理Vue面試
- 面試題整理面試題
- 滴滴多元化試水:2020只為熬下去
- Spring 常見的一些面試題整理Spring面試題
- 為什麼 DNS 協議使用 UDP?只使用了 UDP 嗎?DNS協議UDP
- 不拼花哨,只拼實用:unittest指南,乾貨為王!
- 前端面試之路一(HTML+CSS面試整理)前端面試HTMLCSS
- ES 不香嗎,為啥還要 ClickHouse?
- 邦芒面試:12個能為面試加分的細節面試
- 5 年,只為了一個更好的校驗框架框架
- 【Java面試】Redis存線上程安全問題嗎?為什麼?Java面試Redis
- 【面試】面試常見問題整理面試
- 當面試遇到 Redis,我作為一個面試官是這麼“刁難”你的!面試Redis
- 吐血整理 20 道 Spring Boot 面試題,我經常拿來面試別人!Spring Boot面試題
- JavaScript面試題整理JavaScript面試題
- CSS面試題整理CSS面試題
- linux面試題整理Linux面試題
- Flume面試題整理面試題
- 2020年面試整理面試
- Laravel 面試題整理Laravel面試題
- 華為遊戲試玩不生效遊戲
- 簡單整理了一下最近遇到的一些面試題-面試進行中面試題
- 「面試題」20+Vue面試題整理面試題Vue
- iOS | 面試知識整理 - OC基礎 (一)iOS面試