如何将服务注入 Grails 3 命令?
How do I inject services into a Grails 3 command?
在 Grails 3 应用程序中,如何创建利用应用程序服务和域的 CLI 命令类?
The following did not work:
grails create-app test-grails3-angular-cmd --profile=angular
cd server
grails create-command MyExample
实施我的示例:
package test.grails3.angular.cmd
import grails.dev.commands.*
class MyExampleCommand implements GrailsApplicationCommand {
def testService
boolean handle() {
testService.test()
return true
}
}
grails create-service TestService
实施测试服务:
package test.grails3.angular.cmd
import grails.transaction.Transactional
@Transactional
class TestService {
def test() {
System.out.println("Hello, test service!")
}
}
grails run-command my-example
Command execution error: Cannot invoke method test() on null object
我该如何解决这个问题?
我正在使用 grails 3.3.0.M2。
MyExampleCommand
不是一个 bean,我相信,在哪里可以注入服务。但是,applicationContext
在 GrailsApplicationCommand
中可用(扩展 ApplicationCommand
特征),可以直接利用它来获取服务 bean。
class MyExampleCommand implements GrailsApplicationCommand {
boolean handle() {
TestService testService = applicationContext.getBean(TestService)
testService.test()
return true
}
}
在 Grails 3 应用程序中,如何创建利用应用程序服务和域的 CLI 命令类?
The following did not work:
grails create-app test-grails3-angular-cmd --profile=angular
cd server
grails create-command MyExample
实施我的示例:
package test.grails3.angular.cmd import grails.dev.commands.* class MyExampleCommand implements GrailsApplicationCommand { def testService boolean handle() { testService.test() return true } }
grails create-service TestService
实施测试服务:
package test.grails3.angular.cmd import grails.transaction.Transactional @Transactional class TestService { def test() { System.out.println("Hello, test service!") } }
grails run-command my-example
Command execution error: Cannot invoke method test() on null object
我该如何解决这个问题?
我正在使用 grails 3.3.0.M2。
MyExampleCommand
不是一个 bean,我相信,在哪里可以注入服务。但是,applicationContext
在 GrailsApplicationCommand
中可用(扩展 ApplicationCommand
特征),可以直接利用它来获取服务 bean。
class MyExampleCommand implements GrailsApplicationCommand {
boolean handle() {
TestService testService = applicationContext.getBean(TestService)
testService.test()
return true
}
}