基於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清空。
 

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM