如何将服务注入Grails 3命令?

时间:2017-07-26 18:48:00

标签: angularjs grails grails-plugin grails-services grails-3.3

在Grails 3应用程序中,如何创建利用应用程序服务和域类的CLI命令?

  

以下 无效

  1. grails create-app test-grails3-angular-cmd --profile=angular
  2. cd server
  3. grails create-command MyExample
  4. 实施MyExample:

    package test.grails3.angular.cmd
    
    import grails.dev.commands.*
    
    class MyExampleCommand implements GrailsApplicationCommand {
        def testService
    
        boolean handle() {
            testService.test()
            return true
        }
    }
    
  5. grails create-service TestService

  6. 实施TestService:

    package test.grails3.angular.cmd
    
    import grails.transaction.Transactional
    
    @Transactional
    class TestService {
    
        def test() {
            System.out.println("Hello, test service!")
        }
    }
    
    1. grails run-command my-example
  7.   

    命令执行错误:无法在null对象上调用方法test()

    我该如何解决这个问题?

    我使用的是grails 3.3.0.M2。

1 个答案:

答案 0 :(得分:1)

我相信,

MyExampleCommand不是一个可以注入服务的bean。但是,applicationContext中可以使用GrailsApplicationCommand(扩展ApplicationCommand特征),可以直接利用它来获取服务bean。

class MyExampleCommand implements GrailsApplicationCommand {

    boolean handle() {
        TestService testService = applicationContext.getBean(TestService)
        testService.test()
        return true
    }
}