Grails - Bootstrap - 空指针而不是服务

时间:2014-01-11 15:21:04

标签: grails

我想在我的应用程序中使用init的数据生成器。它在使用.save()方法创建对象时工作正常,但是当我想使用专用服务时它不起作用,因为空指针而不是注入服务。那是我的代码:

我在conf / spring

中定义了DataGenerator bean
beans = {
    dataGenerator(DataGenerator)
}

我的Bootstrap.groovy看起来像是:

class BootStrap {
  def dataGenerator
  def init = { servletContext ->
    dataGenerator.generateData()
  }
}

在`DataGenerator'中我有:

class DataGenerator{
    BookService bookService

    def generateData() {
        log.info("Generating books")
        createBooks()
    }

    def createBooks(){
        (1..40).each() {
            CreateBookCommand command = new CreateBookCommand()
            /* some command populate code*/
            bookService.create(command);
        }
    }
}

问题是,我无法调用create()方法,因为bookService总是null

BookService是简单的grails服务,具有一些依赖性,当然放在grails-app/services

class BookService {    
    UserService userService
    SpringSecurityService springSecurityService

    def create(CreateBookCommand command){
        Book book = new Book()
        command.bindTo(book)
        book.save(flush:true, failOnError:true)
    }
    /*some other methods*/

}

你能告诉我如何解决它吗?

2 个答案:

答案 0 :(得分:5)

在resources.groovy

中试试
beans = {
 dataGenerator(DataGenerator) { bean ->
   bean.autowire = 'byName'
  }
}

答案 1 :(得分:1)

我假设DataGenrator是grails工件之外的类(即:放在src/groovy中),您可以在上下文中引用已经可用的服务类:

beans = {
    dataGenerator(DataGenerator){
        bookService = ref('bookService')
    }
}

或尝试@sudhir提到的自动装配byName