codecamp

Hasor ID注入

前面我们介绍了:类型注入、接口注入、名称注入。三种注入方式,下面我们在介绍一下 ID注入,这种方式和名称注入很像但有所不同。我们先看一下代码:

package net.test.hasor;
public class HelloModule implements Module {
    public void loadModule(ApiBinder apiBinder) throws Throwable {
        apiBinder.bindType(InfoBean.class).idWith("beanA");
        apiBinder.bindType(InfoBean.class).idWith("beanB");
    }
}

public class UseBean {
    @Inject(value = "beanA" , byType = Type.ByID)
    private InfoBean pojoA;
    @Inject(value = "beanB" , byType = Type.ByID)
    private InfoBean pojoB;
}


ID注入和 Name注入的区别


ID注入,我们看到区别于名字注入的第一个特点是 nameWith 换成了 idWith,其次在使用 @Inject 注解时也变得更加复杂还需要指定 byType 属性。


下面我们来说一下 ID 注入和 Name 注入的本质区别,众所周知 IoC 在进行依赖注入时每一个要注入的 Bean 都是在 Hasor 容器中获取的。


如果把注入的代码转化为一般的 getBean,Name方式ID方式 的区别应该像如下这样:

appContext.findBindingBean("beanA",InfoBean.class);
appContext.findBindingBean("beanB",InfoBean.class);

appContext.getInstance("beanA");
appContext.getInstance("beanB");


ID方式还有一个最大的特征,那就是无论 ID 被用到那个类型中。一个 ID 不能被同时应用。这一点和 Name 方式有很大的区别。


这也就是说我么不能使用 idWith 来套用 名称注入 小节中的例子。


Hasor 名称注入
Hasor 得到AppContext
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }