在Grails Services中,插件可以被注入到使用该插件的应用程序中。但是,如果你不想让某些服务是可注入的,你只希望插件知道它们呢?
有办法做到这一点吗?
你可以使用* grailplugin中的pluginexclude属性来实现。groovy脚本:
def pluginExcludes = [
"grails-app/services/com/my/package/MyService.groovy",
]
这样服务就不会被包含在打包的插件*.zip文件中。
一个缺点是这种方法不适用于本地插件-参见http://jira.grails.org/browse/GRAILS-5404
本地插件是使用指定路径从文件系统加载的插件:
grails.plugin.location.shiro = "/home/dilbert/dev/plugins/grails-shiro"
所有Grails服务都公开为Spring bean。这些bean可以通过应用程序上下文获得,因此也可以通过使用插件的应用程序获得。真的没有办法"保护"这些服务不被使用。