spring 載入過程
public void refresh() throws bean***ception, illegalstateexception catch (bean***ception var9)
this.destroybeans();
this.cancelrefresh(var9);
throw var9;
} finally }}
準備工作
protected void preparerefresh()
//初始化屬性源(propertysources)配置
this.initpropertysources();
//校驗所需屬性是否存在,若不存在丟擲missingrequiredpropertie***ception異常
this.getenvironment().validaterequiredproperties();
//建立事件list
}
註冊bean
獲取defaultlistablebeanfactory
protected configurablelistablebeanfactory obtainfreshbeanfactory()
return beanfactory;
}
bean 初始化過程
1.呼叫aware 實現的方法
2.呼叫beanpostprocessor 的 postprocessbeforeinitialization() 方法
3.呼叫initializingbean 的 afterpropertiesset()方法,然後呼叫bean配置的init-method 對應的方法
4.呼叫beanpostprocessor 的 postprocessafterinitialization() 方法
5.beanpostprocessor 的 postprocessbeforeinitialization(),postprocessafterinitialization() 每個bean都會呼叫
protected object initializebean(final string beanname, final object bean, rootbeandefinition mbd)
}, this.getaccesscontrolcontext());
} else
if (mbd == null || !mbd.issynthetic())
try catch (throwable var6)
if (mbd == null || !mbd.issynthetic())
}
private void invokeawareinte***ces(object bean)
//if (bean instanceof embeddedvalueresolveraware)
//resourceloader
if (bean instanceof resourceloaderaware)
}//messagesource
if (bean instanceof messagesourceaware) }}
}
abstractautowirecapablebeanfactory 的 invokeawaremethods(string beanname, object bean) 方法
spring原始碼分析 spring原始碼分析
1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...
spring原始碼分析 bean的載入初探
我已經參透了符文,你輸了 瑞茲 網上有許多對bean載入的講解文章,條例非常清晰,看完後會不想再自己寫,就像我看了張愛玲的 不再想寫 因為我覺得我寫人物的心理永遠也不會寫的比她真實,深刻。就像高曉松說,他看了 百年孤獨 再也不會想寫 一樣。可是別人寫的再好,畢竟是別人的,我還是要寫出來。本文抄襲了部...
Spring 原始碼分析
public throws bean ception 到這裡最終的方法就是refresh super只是做一些初始化工作,可以忽略。以下是初始化發放做的事情 debug main adding systemproperties propertysource with lowest search pr...