Nutz-Ioc手冊

Ioc - 複合加載器


複合加載器的使用方法

原理:它本身並不做任何事情,它只是調用其他的加載器:

ComboIocLoader loader = new ComboIocLoader("*js",
                                               "ioc/dao.js",
                                               "ioc/service.js",
                                               "*anno",
                                               "com.myapp.module",
                                               "com.myapp.service",
                                               "*tx",
                                               // @Async註解,異步執行.
                                               "*async");

如上面的例子,組合加載器,組合了3個 Ioc 加載器,一個是 JsonLoader,一個是 AnnotationIocLoader, 一個是AOP事務的TransIocLoader(1.b.52新增), 一個異步註解加載器。

ComboIocLoader 的構造函數是個字符串形變參數組,所有的參數,如果以星號 "*" 開頭, 則被認爲是加載器的類型,後面的參數都作爲這個加載器構造函數的參數,直到遇到下一個 星號 "*" 開頭的參數。

上面的例子,實際上爲 Ioc 容器準備了這兩個加載器,第一個是 JSON 加載器,它從 dao.js 和 service.js 這兩個配置文件中讀取容器對象的配置信息。 而另外一個 Annotation 加載器,從 會掃描包 com.myapp.module 以及 com.myapp.service 已經其下的子包,如果發現有 容器對象(聲明瞭 @IocBean 註解,詳情請看 Ioc - Annotation 加載器) 就會加載。

並且這兩個加載器的優先級爲

排在前面前面的加載器更優先

在本節的例子中, JsonLoader 加載器比 AnnotationIocLoader 更加優先. 就是說,如果兩個加載器都加載了同名對象,則以 JsonLoader 的爲準。


在 Mvc 中的用法

在 Nutz.Mvc 中,Ioc 容器是由 IocProvider 接口來提供的,所以,每個加載器都由一個類似 的 IocProvier 實現。比如 ComboIocLoader,也就有一個 ComboIocProvider。

但是,請千萬要注意: 對於 ComboIocProvider:

它組合的依然是其他 IocLoader

而不是

其他 IocProvider

下面給個例子:

@IocBy(type = ComboIocProvider.class,
       args = {"*js",
               "ioc/dao.js", 
               "ioc/service.js", 
               "*anno", 
               "com.myapp.module",
               "com.myapp.service"
        })
public class MainModule {
    ...

現在你都可以複合什麼?

  • XmlIocLoader
  • JsonLoader
  • AnnotationIocLoader
  • MapLoader
  • TransIocLoader
  • AsyncAopIocLoader
  • PropertiesIocLoader
  • 所有實現的 IocLoader接口的類

類名的簡寫

js         --> org.nutz.ioc.loader.json.JsonLoader
json       --> org.nutz.ioc.loader.json.JsonLoader
xml        --> org.nutz.ioc.loader.xml.XmlIocLoader
annotation --> org.nutz.ioc.loader.annotation.AnnotationIocLoader
anno       --> org.nutz.ioc.loader.annotation.AnnotationIocLoader
tx         --> org.nutz.aop.interceptor.ioc.TransIocLoader  #無參數
trans      --> org.nutz.aop.interceptor.ioc.TransIocLoader  #無參數
async       --> org.nutz.aop.interceptor.async.AsyncAopIocLoader #可以帶一個線程池大小的參數
props       --> org.nutz.ioc.loader.properties.PropertiesIocLoader # 通過properties文件定義ioc bean
properties --> org.nutz.ioc.loader.properties.PropertiesIocLoader

引用:http://nutzam.com/core/ioc/loader_combo.html 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章