Hasor Start階段

2018-10-04 12:28 更新
  • doStart :執(zhí)行 start 階段的起始標(biāo)志。
  • ContextEvent_Started :通過(guò)事件機(jī)制發(fā)送 AppContext#ContextEvent_Started 事件。
  • doStartCompleted :執(zhí)行 start 階段的終止標(biāo)志。


如一開(kāi)始在 0. 生命周期 小結(jié)中所介紹,Start 階段一共有三個(gè)擴(kuò)展點(diǎn)(0.生命周期:圖右側(cè))它們分別是 ContextStartListener 接口的 doStart、doStartCompleted 方法,以及 LifeModule 接口的 onStart 方法。


A. 意義


下面這張圖為我們展現(xiàn)了這三個(gè)節(jié)點(diǎn)對(duì)我們的重要意義。

Hasor Start階段


對(duì)于框架而言,加載 LifeModule 的先后順序沒(méi)有多大重要性,但是對(duì)于開(kāi)發(fā)者而言可能有著很重要的意義,例如:先初始化數(shù)據(jù)庫(kù)連接,在創(chuàng)建測(cè)試數(shù)據(jù)。我們知道通常在同一個(gè)應(yīng)用中,創(chuàng)建數(shù)據(jù)庫(kù)連接的 Module 和 創(chuàng)建測(cè)試數(shù)據(jù)的 Module 它們的加載順序我們是可以控制的。但是當(dāng)引入一個(gè)基于 Hasor Module 的第三方組件時(shí)。我們就無(wú)法保證 Module 的加載順序,因?yàn)榭蚣懿粫?huì)對(duì)它們進(jìn)行排序的,同時(shí)開(kāi)發(fā)者也無(wú)法進(jìn)行控制。


這時(shí)候 ContextStartListener 接口的兩個(gè)方法就會(huì)為我們提供一些幫助。這一組方法執(zhí)行的時(shí)機(jī)相當(dāng)于給所有 LifeModule 在執(zhí)行它們的 onStart 方法前后加了一個(gè)大的全局?jǐn)r截器。


B. 什么時(shí)候使用 ContextStartListener?


嚴(yán)格意義上說(shuō),ContextStartListener 的設(shè)計(jì)初衷并不是給業(yè)務(wù)系統(tǒng)準(zhǔn)備的。但當(dāng)您被此類問(wèn)題困擾時(shí)候,可以嘗試使用這個(gè)接口來(lái)解決問(wèn)題。當(dāng)然這個(gè)接口也不是萬(wàn)能的,它也有一些限制。

  • 第一個(gè)限制:ContextStartListener,即便可以在所有 LifeModule 執(zhí)行 onStart 之前執(zhí)行,但是它依然無(wú)法控制 LifeModule 具體的執(zhí)行順序。
  • 第二個(gè)限制:ContextStartListener,無(wú)法知道哪些 LifeModule 被加載。同樣的 ContextShutdownListener 也無(wú)法知道哪些 LifeModule 沒(méi)有成功執(zhí)行 onStop。


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)