3 finishbeanfactoryinitialization(beanfactory);
1、spring容器的初始化時,通過this()呼叫了無參建構函式,主要做了以下三個事情:
(1)例項化beanfactory【defaultlistablebeanfactory】工廠,用於生成bean物件
(2)例項化beandefinitionreader註解配置讀取器,用於對特定註解(如@service、@repository)的類進行讀取轉化成 beandefinition 物件,(beandefinition 是 spring 中極其重要的乙個概念,它儲存了 bean 物件的所有特徵資訊,如是否單例,是否懶載入,factorybeanname 等)
(3)例項化classpathbeandefinitionscanner路徑掃瞄器,用於對指定的包目錄進行掃瞄查詢 bean 物件
我們需要記住:spring 中的每乙個容器都會呼叫 refresh 方法進行重新整理,無論是 spring 的父子容器,還是 spring cloud feign 中的 feign 隔離容器,每乙個容器都會呼叫這個方法完成初始化。
public void refresh(
) throws bean***ception, illegalstateexception
...
}}
1 例項化beanfactory【defaultlistablebeanfactory】工廠,用於生成bean物件;
2:初始化beandefinitionreader並從xml載入bean的定義資訊
1 載入bean的定義的資訊到beanfactory中的beandefinitionnames中
1 初始化所有非單例bean
1 完成單例物件的建立
1 此方法中instanitiatebean()方法是例項化bean的主要方法
1 通過預設的構造器進行例項化bean物件
1 clazz.getdeclaredconstructor();通過反射獲取構造器
1 ctor.newinstance()//反射例項化bean
回到docreatebean方法中當前bean已經例項化,繼續向下執行
1 pupulatebean() 給bean填充屬性
2 initializebean() 初始化bean
閱讀Spring原始碼
如何閱讀spring原始碼 學習原始碼的思路 為擴充套件 調優 掌握框架的工作流程和原理。提公升自己的程式設計能力 學習他人的設計模式和思路。掌握設計方法和分析思路。學習原始碼的方法 思路掌握問題域理論和核心概念 搞明白做什麼,如何做 從整體到部分 找到入口,先理清主幹流程,後細節 多思考,多分析 ...
Spring 原始碼閱讀(1)
這週在學習spring的原始碼,常常迷失在 森林中,因為英語水平不高,常常需要借助google翻譯幫忙解釋注釋,所以速度比較慢。下面是我模擬spring的解析xml,依賴注入的過程,比較簡略。node node nodes.item i if node instanceof element claz...
spring原始碼閱讀(1)
spring核心是ioc和aop,aop的底層是 實現。分為兩種 jdk動態 和cglib 區別 動態 被 物件是要實現乙個介面,類首先要拿到這個介面,來進行強制轉換,通過反射來生成 物件 public class meipo implements invocationhandler overrid...