基於nutz架構理解Ioc容器,nutz架構ioc
同樣我們從問題入手去驗證以及去理解Ioc容器都做了哪些事情:1.nutz是有幾種方式擷取需要容器管理bean的資訊?
第一種是使用json格式的檔案進行配置,如:
第二種:使用註解@IocBean
第三種:使用xml 略.......
2. 如何那麼多的方式如何進行選擇呢?
我們自己實際的生產環境的用法是: 一般的依賴關係都是固定的,在啟動並執行時候基本不變的,我們採用的是註解, 將可能變動的關係寫到設定檔裡。 比如:我們將項目中各個分層之間的service採用的是註解,
將資料庫相關配置放到設定檔中,
3.ioc容器是如何確定哪些Bean是容器需要管理的:
問幾個問題: a.它是怎麼知道哪些檔案中配置是需要被容器管理的bean,以及需要掃描哪些類上的@IocBean註解呢?? nutz提供了一個註解(@IocBy)專門用於在主模組類上指定掃描哪些檔案以及註解。
有可以知道: json方式配置的bean的載入器去webconfig/下,以及Linux下的兩個路徑下掃描。 註解方式配置的bean載入器將掃描com.uxuexi開頭包下的類。 b.它是如何去掃描除本項目之外的jar包(一般都是自己建立的,不會掃描第三方)呢? 可以在項目啟動的時候,nutz的ioc容器載入完畢之前手動將要容器管理的bean掃描到容器中。 4. 何時開始建立這些被容器管理的bean?
nutz在服務啟動的時候將所有被@IocBean註解的類以及配置在json格式檔案中的類資訊載入到一個map中。
就是上面圈住的那個map,其中key預設是這個類名。 而這個IocObject這個類主要就是記住這個類的資訊:
就是說在伺服器啟動的時候nutz只是掃描註解和檔案將需要被容器管理的bean的資訊集中儲存到一個地方中,並沒有真正的建立這些bean的執行個體。5.容器什麼時候會建立真正bean的執行個體??
分兩種種情況: 1.第一種當服務啟動的時候就需要擷取容器中的bean執行個體,可以手動擷取容器。
2.第二種是當我們的第一次http請求映射到的那個Module類,nutz會幫你去從ioc容器中取。
6.都提供哪些Ioc的注入類型??
建構函式注入:
屬性注入:
7.ioc容器在什麼時候銷毀???
nutz通過將Filter的destroy方法在web容器停止啟動並執行時候會將ioc容器銷毀,
NutzLoading類中的方法:
就是將緩衝中存放map清空。