我想在我的应用程序中使用init的数据生成器。它在使用.save()方法创建对象时工作正常,但是当我想使用专用服务时它不起作用,因为空指针而不是注入服务。那是我的代码:
我在conf / spring
中定义了DataGenerator beanbeans = {
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*/
}
你能告诉我如何解决它吗?
答案 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
。