Jul 10, 2017 10:38:44 AM
作者:
鸭子法则
如果它走路像鸭子,说话像鸭子,样子像鸭子,叫声也像鸭子,那它就是一只鸭子。
对于 Nutz Ioc 来说,它面对的配置文件就是层层嵌套的 "名值对集合",或者说是 Map 集合。事实上,它是先把整个配置文件解析成 Map 再做判断的。
如果一个 Map 仅包括如下的键,则被认为是一个注入对象:
匿名对象
如果,一个字段的值就是这样一个 “鸭子 Map” 呢? 那么,自然会被认为是另外一个对象。这个对象没有名字,你不能通过 Ioc 接口直接获得,它隐藏在某个对象的某个字段里面。所以我们称这个对象为 匿名对象
匿名对象,没有所谓的单例,你声明了 singleton: true 也没有用。如果它的宿主是单例,它自然也只会被创建一次。否则,每次宿主被创建的时候,它都会被创建。
Pet pet = ioc.get(Pet.class, "xb");
System.out.println(pet.getFriend().getName());
ioc.depose();
JSON 加载器
从上面的例子代码可以看出来,Nutz 的Ioc实现需要你提供一个加载器给它。
^
+----- 这里你提供了一个加载器
你这个加载器是怎么实现的 NutIoc 并不关心。在 Nutz 最早的版本,它提供的第一个加载器就是 JsonLoader。
对于 JsonLoader 更多的描述,请参看
工厂方法
其中 xxx.xx.xxxxFactory是工厂类的类全名, create是工厂方法, 其参数是"user_profile_cache"
从1.b.53开始,支持ioc bean做factory bean
{
args : ["user_profile_cache"],
}
其中的beanCacheFactory是另外一个ioc bean的名称, create是工程方法的名字, 参数列表需要与args一致
生命周期范围
默认的scope是app, 与ioc容器共存亡. 可选的还有request和session, 已经很少很少使用,且仅限于子模块类及其依赖的对象.
一般情况下,不需要也不应该设置scope的值.