W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
首先開始一個(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();
}
});
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: