国产gaysexchina男同gay,japanrcep老熟妇乱子伦视频,吃奶呻吟打开双腿做受动态图,成人色网站,国产av一区二区三区最新精品

Hasor 用代碼配置注入

2018-10-06 10:30 更新

前面我們講了很多依賴注入的功能都是基于注解實現(xiàn),現(xiàn)在我們回歸原始在這一小節(jié),專門講解如何通過代碼形式完成依賴注入的配置。

在開始之前我們先把場景列出來?,F(xiàn)在我們有一個 “OrderManager” 類,它在初始化時會根據(jù)一些業(yè)務(wù)邏輯來決定注入的細節(jié)。例如:具體使用哪一套庫存系統(tǒng)。

這個時候前面講到的各種依賴注入方式,可能都因為沒有太多的靈活性而導(dǎo)致無法完成場景需要。這個時候你可以通過 Hasor 的 InjectMembers 接口完成更加靈活的對象依賴注入控制。


具體請看代碼:

public class OrderManager implements InjectMembers {
    @Inject  // <-因為實現(xiàn)了InjectMembers接口,因此@Inject注解將會失效。
    public StockManager stockBeanTest; 
    public StockManager stockBean;
    //
    public void doInject(AppContext appContext) throws Throwable {
        boolean useCaseA = ...
        if (useCaseA){
            this.iocBean = appContext.findBindingBean(
                "caseA",PojoBean.class);
        }else{
            this.iocBean = appContext.findBindingBean(
                "caseB",PojoBean.class);
        }
        //
    }
}


您要注意的是,為了避免 InjectMembers 接口注入和注解注入同時生效造成的混亂。一旦您打算使用 InjectMembers 方式進行注入 Hasor 就不會在解析注解進行注入。


接下來我們在介紹一種代碼形式的依賴注入,還是以上面的例子為樣本。我們可以在 Module 中進行預(yù)先配置。

public class OrderManager {
    public StockManager stockBean;
    ...
}


實現(xiàn)注入的 Module 這樣編寫:

public class MyModule implements Module {
    public void loadModule(ApiBinder apiBinder) throws Throwable {
        ...
        boolean useCaseA = ...;
        BindInfo<StockManager> injectTo = null;
        if (useCaseA){
            injectTo = apiBinder.bindType(StockManager.class)
                    .to(StockManagerCaseA.class).toInfo();
        }else{
            injectTo = apiBinder.bindType(StockManager.class)
                    .to(StockManagerCaseB.class).toInfo();
        }
        apiBinder.bindType(OrderManager.class).inject("stockBean",injectTo);
    }
}



以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號