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 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值