一般动作
登录
Wiki: BROPEN ▼: Document Index
»
Space: FAQ ▼: Document Index
»
Page: 插件或工程里的 Bootstrap 类的执行顺序
搜索
zh
页面动作
导出 ▼: 以PDF格式导出 以RTF格式导出 以HTML格式导出
更多动作 ▼: 打印预览 察看源码
欢迎进入Wiki » FAQ » 插件或工程里的 Bootstrap 类的执行顺序?

# 插件或工程里的 Bootstrap 类的执行顺序?

在2013-12-04 00:22上被李小翔修改
评论 (0) · 附件 (0) · 记录 · 信息

Grails开发过程中，可以编写工程或者插件的 Bootstrap 类在启动或者停止应用的时候执行一些代码，以实现系统初始化等功能，如：

// 工程的 BootStrap：
// grails-app/conf/BootStrap.groovy
class BootStrap {
def init = { servletContext ->
....
}
def destroy = {
....
}
}

但是在工程启动过程中，除了工程的 BootStrap 类固定最后执行的，其他插件中的 Bootstrap 类的执行顺序却是乱序的，简单分析一下Grails 2.2.1的源码：

- 在 org.codehaus.groovy.grails.web.context.GrailsConfigUtils 的 executeGrailsBootstraps 方法中，遍历所有 Bootstrap 类并依次执行，但是遍历过程除了工程里的 BootStrap 是最后执行的以外，其他插件中的 Bootstrap 类的执行是无序的
- 在 org.codehaus.groovy.grails.web.servlet.GrailsDispatcherServlet 的 destroy 方法中，会无序执行所有的 destroy 方法

不知到是 Grails 的缺陷还是有意为之，当多个插件之间有依赖关系时（如XxxxGrailsPlugin.groovy 中的 dependsOn 或 loadAfter 设置），无序执行 Bootstrap 可能会导致不可预知的问题。

因此，在 BroToolkit 中，我们对上述两个Grails源码稍作修改，先按照插件依赖关系将 Bootstrap 类重新排序（暂未考虑 loadBefore 的关系），init时顺序执行、destroy时逆序执行。

标签： grails BroToolkit
在2013-12-04 00:22上被李小翔创建

- 评论 （0）
- 附件 （0）
- 记录
- 信息

# 快速链接

- 首页
- 新闻动态
- FAQ

Copyright © 2013 北京博瑞开源软件有限公司
京ICP备12048974号