我希望在我的grails项目中创建DAO层,该DAO层不会与任何域类关联,并且会与我的项目的辅助数据库进行交互。尝试在任何控制器中注入服务时收到以下错误:
"Cannot invoke method abc() on null object"
但是,当我使用控制器中的new
关键字初始化服务时,该错误已解决并且可以正常使用,但是我知道这不是必需的,因为grails应该可以处理它。谁能告诉我我想念什么?
答案 0 :(得分:0)
我认为问题与服务是否与域类相关联无关。 DI容器对此一无所知。
如果您有这样的控制器:
// grails-app/controllers/demo/SomeController.groovy
package demo
class SomeController {
SomeService someService
def someControllerAction() {
someService.abc()
// ...
}
}
还有这样的服务...
// grails-app/services/demo/SomeService.groovy
package demo
class SomeService {
void abc() {
// ...
}
}
那会很好。
几乎不可能肯定地说不看你的代码在做什么错,但是这样的一种可能性是行不通的:
// grails-app/controllers/demo/SomeController.groovy
package demo
class SomeController {
def someControllerAction() {
// This is a local variable, not
// a property and as such will not
// be subjected to dependency injection.
SomeService someService
// ...
someService.abc()
// ...
}
}
此外,请确保属性名称(以上示例中的someService
)与服务类名称匹配,但首字母应小写(通常,请确保属性名称与以下名称的属性名称匹配):服务类名,通常只需使用小写的类名首字母即可。