上文我們已經通過該行**:var typefinder = containermanager.resolve(); 從注入容器中獲取到了typefinder例項。
通過該例項進行以下操作。
var drtypes = typefinder.findclassesoftype(); 從bin所有程式集中獲取實現了idependencyregistrar介面的所有實現類。迴圈這些實現類病呼叫 void register(containerbuilder builder, itypefinder typefinder);方法來做其他事情。
通過反射能夠獲取到8個實現了該介面的例項,下面我們乙個個分析,實現了這些介面的類都做了什麼事情。
1,dependencyregistrar : idependencyregistrar
a:註冊http context and other related stuff,
b:註冊webhelper。 builder.registertype().as().instanceperhttprequest();
c:註冊程式集中的所有控制器。 builder.registercontrollers(typefinder.getassemblies().toarray());
f:註冊worker和store相關的類。
g:註冊所有實現類。
i:註冊發布訂閱服務類:
3,註冊和google相關的服務。
4,註冊: builder.registertype().as().instanceperhttprequest();
5,註冊 builder.registertype().as().instanceperhttprequest();
6, builder.registertype()
.withparameter(resolvedparameter.fornamed("nop_cache_static"));
7,註冊一些控制器和 builder.registertype().as().instanceperhttprequest();
8,註冊乙個和重量相關的服務類。
9,註冊broker類。
至此所有容器注入的工作全部完成,下面開始初始化一些工作。
所有的工作全部在 runstartuptasks();方法中完成。
startuptasktypes = typefinder.findclassesoftype(); 該行**獲取程式集中所有實現了istartuptask介面的的類。
迴圈遍歷實現類,並執行execute()方法。來完成所有的初始化工作,**如下:
foreach (var startuptask in startuptasks)
startuptask.execute();
2,初始化googleproductobjectcontext等。
4,set localization service for telerik 。
至此initialize engine context的工作全部完成。
enginecontext.initialize(false)執行完畢。
二 LinkedList原始碼分析
二 linkedlist原始碼分析 上篇看了下arraylist原始碼,這篇記錄下linkedlist原始碼分析 linkedlist 繼承 abstractsequentiallist 提供了對元素順序訪問的抽象 linkedlist 實現 deque介面,底層構成雙向鍊錶結構 linkedlis...
Spring原始碼分析(二)
針對spring中bean初始化時擴充套件類執行順序進行分析 通過getbean逐層最終到bean例項化前後呼叫的方法,主要是aware介面 beanpostprocessor initializingbean init method的呼叫順序 abstractbeanfactory dogetbe...
Jquery原始碼分析 二)
prk 2008 08 12 型別 說明 dom element 第乙個引數為dom元素,第二個引數不用。直接把dom元素存在新生成的jquery物件的集合中。返回這個jquery物件。構建jquery物件完成。string 第乙個引數為string有三種情況 1 html的標籤字串,html ar...