我正在尝试将我的 Grails 应用程序转换/转换为 Grails 插件。这篇文章对我这样做很有帮助:
http://burtbeckwith.com/blog/?p=1973
在复制粘贴文件并按照上面的链接时,我被 Bootstrap.groovy 文件卡住了。虽然我必须将我的 Bootstrap.groovy 的 init() 代码粘贴到 ".doWithApplicationContext"中,但我已经这样做了,但我在注入(inject)服务方面遇到了问题。这是我的应用程序的引导文件:
class BootStrap {
//Injecting voice recordign service
def processRecordingVoiceRecognizitonService
//Injecting Service to Connect to AMQ Server to Send Recording
def AMQConnectionManagementService
//Injecting AMQ Publisher to Publish Voice Recognition Results
def messagePublisherService
//Injecting AMQ Consumer to Consume Voice Model Creation Notifications
def messageConsumerService
.
.
.
.
.
.
.
可以看到我在我的 Bootstrap 中注入(inject)服务。
我在 PluginDeciptor.groovy 的开头粘贴了那段代码,但 Intellij Idea 没有显示注入(inject)标志,这意味着服务没有被注入(inject)。
实际上可以在插件描述符中注入(inject)服务吗?如果不是,那么在服务文件中初始化和建立必要连接的方法是什么?
我找到了一个相关的问题,但无法理解。这是链接以防万一。 inject service into instance of src/groovy class
最佳答案
插件描述符生命周期中 BootStrap 的等效点是 doWithApplicationContext
,它接收对 ApplicationContext
的引用您可以从中获取所需的任何服务。您不能以正常方式将服务注入(inject)描述符,因为描述符在 ApplicationContext
之前被实例化(并调用了它的几个关键方法)。已设置。
def doWithApplicationContext = { applicationContext ->
applicationContext.messagePublisherService.someMethodName()
或者,插件可以通过将其命名为
MyPluginBootStrap.groovy
来为应用程序提供引导工件。 - grails-app/conf
中的任何 Groovy 类名称以 BootStrap 结尾的将被视为引导伪影,它只是普通的 BootStrap.groovy
在被排除在“贡献”到依赖插件的应用程序之外的插件中。
关于grails - 在 Grails PluginDescriptor.groovy 文件中注入(inject)服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29345753/