1

我想在不使用 *Service 后缀约定的类名称的情况下创建 Grails 服务(例如,将我的类命名为 Scheduler 而不是 ScheduleService)。无论如何,是否有覆盖 Grails 的默认行为并将grails-app/service目录中的任何对象视为 Grails 服务?

4

4 回答 4

3

我不这么认为,但如果原因是你想为 bean 使用不同的名称,你可以尝试为 scheduleService 注册一个别名。根据此页面上的评论,您应该能够将其添加到 resources.groovy:

springConfig.addAlias('scheduler','scheduleService')

不过,我自己没有尝试过,也没有在文档中找到任何内容。

于 2012-12-20T19:08:08.600 回答
2

当然可以,只需在 resources.groovy 中进行

scheduler(YourCustomSchedulerClassname){ b->
    // config
}

然后你可以在其他任何地方做

class MyService {
    def scheduler
}
于 2015-07-24T14:22:56.563 回答
1

Grails 服务注册为带有插件的 bean,信不信由你,因此您应该能够通过创建自己的插件来完成此操作。

查看grails-plugin-services 源代码。您可以看到监视的服务与此行硬连线:

def watchedResources = ["file:./grails-app/services/**/*Service.groovy",
                        "file:./plugins/*/grails-app/services/**/*Service.groovy"]

现在,尽管这是可能的,但它可能需要一些工作,而且这可能是个坏主意。我真的不知道。我不知道如果你从本质上复制服务插件、更改watchedResources并将其包装在你自己的插件中,Grails 是否会发疯。

我只是浏览了 grails 文档,关于Artefacts的部分也应该很有用。

如果您只是在寻找一种更简单的方法来引用您的服务,请执行以下操作:

def painfullyLongNameService
def getNoPain() {return painfullyLongNameService}

noPain.yourServiceFunction()
于 2012-12-21T05:55:17.690 回答
1

不要认为这是可能的。因为它是 grails 框架中隐含的“约定”的一部分。

于 2012-12-20T18:18:25.850 回答