一般动作
登录
Wiki: BROPEN ▼: Document Index
»
Space: FAQ ▼: Document Index
»
Page: 插件开发时，如何实现service类的继承（或同名类）
搜索
zh
页面动作
导出 ▼: 以PDF格式导出 以RTF格式导出 以HTML格式导出
更多动作 ▼: 打印预览 察看源码
欢迎进入Wiki » FAQ » 插件开发时，如何实现service类的继承（或同名类）?

# 插件开发时，如何实现service类的继承（或同名类）?

在2013-11-26 10:07上被李小翔修改
评论 (0) · 附件 (0) · 记录 · 信息

Grails 2.2后，引入了命名空间的机制，在不同的插件中开发的同名的 Service 类注册成的bean的名称会带上插件名称，比如：插件 PublishingUtilities 中的 com.publishing.AuthorService 类、以及插件 BookUtilities 的 com.bookutils.AuthorService 类会被分别注册成 publishingUtilitiesAuthorService 和 bookUtilitiesAuthorService。

这中机制能解决同名服务类注册的名称冲突问题，但是同时也带来了一个新的问题，开发新的应用时，需要带上插件名称来定义依赖注入的属性，如：

class FoobarController {
def publishingUtilitiesAuthorService
}

可是假如某天我们不再需要插件 BookUtilities 了呢，就得修改所有相关的代码；而且，如果两个插件中的同名服务类只是继承关系（新增或者覆盖了父类的某些功能），而我们希望多开发者来说透明，这样使用起来就非常的不方便了。

BroToolkit 中引入了一种插件服务类的继承机制，只需要在同名的服务类中定义一个 aliasOverridingOrder 的整型常量，就可以在系统启动时，自动将最大值的服务类注册为不带插件名的Spring Bean。当然，工程中的同名服务优先级最高。

例如下面的两个服务类：

// 插件 PublishingUtilities
class AuthorService {
static aliasOverridingOrder = 100;
}
// 插件 BookUtilities
class AuthorService extends com.publishing.AuthorService {
static aliasOverridingOrder = com.publishing.AuthorService.aliasOverridingOrder + 100;
}
// 示例控制器
class FoobarController {
// com.bookutils.AuthorService
def authorService
}

com.bookutils.AuthorService 继承自 com.publishing.AuthorService，并且设置了一个更大的 aliasOverridingOrder 值，因此在控制器中使用依赖注入的方式定义属性 authorService 时，该属性将会是 com.bookutils.AuthorService 的实例。

标签： grails BroToolkit
在2013-11-26 10:07上被李小翔创建

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

# 快速链接

- 首页
- 新闻动态
- FAQ

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