Hasor 基本IoC

2018-10-02 10:34 更新

首先開始一個(gè)項(xiàng)目中會有各種類,類與類之間還有復(fù)雜的依賴關(guān)系。如果沒有 IoC 框架的情況下,我們需要手工的創(chuàng)建它們。通常在你腦海里會呈現(xiàn)一張龐大的對象圖,你必須要保證它們依賴沒有錯(cuò)誤。但這是十分繁瑣而且是很容易出錯(cuò)的。

??

付款服務(wù)以及 ItemService 商品服務(wù)。

public class TradeService {
    @Inject
    private PayService      payService;
    @Inject
    private ItemService     itemService;

    public boolean payItem(long itemId , CreditCard creditCard){
        ...
    }
}


接下來我們創(chuàng)建 AppContext 并通過它將 TradeService 所需要的服務(wù)對象注入進(jìn)去即可。接下來您只需要通過下面這個(gè)代碼完成 TradeService 對象的創(chuàng)建,Hasor 會自動完成依賴注入。

AppContext appContext = Hasor.createAppContext();
TradeService tradeService = appContext.getInstance(TradeService.class);
....
tradeService.payItem(......);


如果 PayService 為一個(gè)接口而非具體的實(shí)現(xiàn)類,那么您可以在 PayService 接口上通過 @ImplBy 注釋標(biāo)記出它的實(shí)現(xiàn)類即可。

@ImplBy(PayServiceImpl.class)
public interface PayService {
    ...
}


如果我們需要 TradeService 是一個(gè)單列那么在類上標(biāo)記 @Singleton 注解即可。

@Singleton
public class TradeService {
    ...
}


接下來如果我們希望 TradeService 在創(chuàng)建時(shí)做一些初始化工作,您只需要在初始化方法上加上 @Init 注解即可。

@Singleton
public class TradeService {
    @Init
    public void initMethod(){
        ...
    }
}


同樣的例子,我們還可以通過 Module 的方式進(jìn)行實(shí)現(xiàn) 無侵入 的注入。

AppContext appContext = Hasor.createAppContext(new Module() {
    public void loadModule(ApiBinder apiBinder) throws Throwable {
        apiBinder.bindType(TradeService.class)
                .inject("payService", apiBinder.bindType(PayService.class).toInfo())
                .inject("itemService", apiBinder.bindType(ItemService.class).toInfo())
                .initMethod("initMethod")
                .asEagerSingleton();
    }
});


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號