同樣我們從問題入手去驗證以及去理解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清空。