如何在grails中注入与任何域类都不相关的自定义服务?

时间:2019-03-20 12:08:11

标签: grails service dao

我希望在我的grails项目中创建DAO层,该DAO层不会与任何域类关联,并且会与我的项目的辅助数据库进行交互。尝试在任何控制器中注入服务时收到以下错误:

"Cannot invoke method abc() on null object"

但是,当我使用控制器中的new关键字初始化服务时,该错误已解决并且可以正常使用,但是我知道这不是必需的,因为grails应该可以处理它。谁能告诉我我想念什么?

1 个答案:

答案 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)与服务类名称匹配,但首字母应小写(通常,请确保属性名称与以下名称的属性名称匹配):服务类名,通常只需使用小写的类名首字母即可。