Spring原始碼閱讀過程遇到的知識點整理

2021-10-05 11:23:06 字數 1460 閱讀 6999

1. spring 類的例項化順序問題:

如果希望乙個類中@bean注入的類在外部類初始化之前初始化可以用static修飾

2. bean例項化操作:

beanfactorypostprocessor在bean例項化之前執行,之後例項化bean(呼叫建構函式,並呼叫set方法注入屬性值),然後在呼叫兩個初始化方法前後,執行了beanpostprocessor。初始化方法的執行順序是,先執行afterpropertiesset,再執行init-method

beanfactorypostprocessor:容器的擴充套件點方法,可以在這個擴充套件點修改beanddfinition的定義(此時bean還有例項化)比如修改bean的作用域(單例,原型),修改bean的元資訊。

beanpostprocessor:提供bean初始化前後的擴充套件點;

3. spring注入的幾種方式:

4. 具體如何注入乙個bean呢?

可以通過註解,xml,配置檔案resource三種方式注入乙個類(依賴於beandefinition):

做法就是通過***beandefinitionreader.register注入 比如通過註解實現;

beandefinitionreader.register(***.class);

5.beandfinition介紹:

beandefinition是通過beandefinitionregister注入的,會進行合併操作(子類childuser,父user,例項化childuser會向上遞迴先例項化user,合併他的屬性到childuser);

beandfinition作用:我們一般獲取物件的方式有兩種,一種是手動直接 new;另一種是交給 spring 管理,spring 將管理的物件稱之為 bean,容器會先例項化 bean,然後自動注入,例項化的過程就需要依賴 beandefinition。

beandefinition 用於儲存 bean 的相關資訊,包括屬性、構造方法引數、依賴的 bean 名稱及是否單例、延遲載入等,它是例項化 bean 的原材料,spring 就是根據 beandefinition 中的資訊例項化 bean。

6. @configuration和@component的區別

@configuration標註在類上,該類會被cglib動態**生成子類,可以達到這樣的效果:在某@bean方法下呼叫另乙個標註了@bean的方法,得到的會是同乙個bean物件;

@component標註的類會產生多個

註解注意點:

1.可以作為component標籤使用;  

2.標註的類不能是final型別的(final類無法動態**生成子類);

3.註解類裡的@bean物件的id預設是方法名,如果設定了@bean的name或者value屬性,取第乙個作為beanid,name中其他的作為別名使用;

4. 標註了@configuration的類不能是普通內部類,如果非要是個內部類,那就靜態內部類也是可以的; 因為普通內部類依賴於外部類的存在;

PHP核心原始碼閱讀過程(二)

接上篇,這裡一開始是sapi的初始化 1.sapi startup函式 sapi api void sapi startup sapi module struct sf 以上將win32平台和多執行緒安全的 刪除了,總共就4行。最後乙個reentrancy startup是乙個執行緒安全開啟的情況下...

閱讀Spring原始碼

如何閱讀spring原始碼 學習原始碼的思路 為擴充套件 調優 掌握框架的工作流程和原理。提公升自己的程式設計能力 學習他人的設計模式和思路。掌握設計方法和分析思路。學習原始碼的方法 思路掌握問題域理論和核心概念 搞明白做什麼,如何做 從整體到部分 找到入口,先理清主幹流程,後細節 多思考,多分析 ...

Spring 原始碼閱讀(1)

這週在學習spring的原始碼,常常迷失在 森林中,因為英語水平不高,常常需要借助google翻譯幫忙解釋注釋,所以速度比較慢。下面是我模擬spring的解析xml,依賴注入的過程,比較簡略。node node nodes.item i if node instanceof element claz...