codecamp

Hasor Start阶段

  • doStart :执行 start 阶段的起始标志。
  • ContextEvent_Started :通过事件机制发送 AppContext#ContextEvent_Started 事件。
  • doStartCompleted :执行 start 阶段的终止标志。


如一开始在 0. 生命周期 小结中所介绍,Start 阶段一共有三个扩展点(0.生命周期:图右侧)它们分别是 ContextStartListener 接口的 doStartdoStartCompleted 方法,以及 LifeModule 接口的 onStart 方法。


A. 意义


下面这张图为我们展现了这三个节点对我们的重要意义。

Hasor Start阶段


对于框架而言,加载 LifeModule 的先后顺序没有多大重要性,但是对于开发者而言可能有着很重要的意义,例如:先初始化数据库连接,在创建测试数据。我们知道通常在同一个应用中,创建数据库连接的 Module 和 创建测试数据的 Module 它们的加载顺序我们是可以控制的。但是当引入一个基于 Hasor Module 的第三方组件时。我们就无法保证 Module 的加载顺序,因为框架不会对它们进行排序的,同时开发者也无法进行控制。


这时候 ContextStartListener 接口的两个方法就会为我们提供一些帮助。这一组方法执行的时机相当于给所有 LifeModule 在执行它们的 onStart 方法前后加了一个大的全局拦截器。


B. 什么时候使用 ContextStartListener?


严格意义上说,ContextStartListener 的设计初衷并不是给业务系统准备的。但当您被此类问题困扰时候,可以尝试使用这个接口来解决问题。当然这个接口也不是万能的,它也有一些限制。

  • 第一个限制:ContextStartListener,即便可以在所有 LifeModule 执行 onStart 之前执行,但是它依然无法控制 LifeModule 具体的执行顺序。
  • 第二个限制:ContextStartListener,无法知道哪些 LifeModule 被加载。同样的 ContextShutdownListener 也无法知道哪些 LifeModule 没有成功执行 onStop。


Hasor Init阶段
Hasor Shutdown阶段
温馨提示
下载编程狮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; }