【发布时间】:2013-01-17 08:03:59
【问题描述】:
我试图在src/groovy 下的groovy 类中访问grailsApplication,但我得到一个空指针异常。我还尝试将服务注入同一个类和相同的结果。如何访问grailsApplication 或 groovy 类的服务? (我使用的是 Grails 1.3.7)
【问题讨论】:
我试图在src/groovy 下的groovy 类中访问grailsApplication,但我得到一个空指针异常。我还尝试将服务注入同一个类和相同的结果。如何访问grailsApplication 或 groovy 类的服务? (我使用的是 Grails 1.3.7)
【问题讨论】:
ApplicationHolder 类在较新的 Grails 版本(2.0 及更高版本)中已弃用。
还有另一种方式,在 Burt 的一篇博文中有所描述:http://burtbeckwith.com/blog/?p=1017
【讨论】:
在 Grails 2.0 之后,你应该使用:
def grailsApplication = Holders.grailsApplication
【讨论】:
依赖注入不适用于src/groovy 下的 groovy 类。您可以像这样使用ApplicationHolder 访问grailsApplication:
import org.codehaus.groovy.grails.commons.ApplicationHolder
def grailsApplication = ApplicationHolder.application
您可以像这样访问所有服务:
def allServicesArtefacts = grailsApplication.services
【讨论】:
如果你有想要参与来自 src/groovy 或 src/java 甚至 3rd 方 jar 的依赖注入的类,你所要做的就是在 grails-app/conf/spring/resources.groovy 中配置它们。
如果你的 src/groovy 目录中有类 mypackage.MyClass,如下所示:
package mypackage
class MyClass{
def grailsApplication
def myMethod(){
//uses grailsApplication
}
}
然后通过将以下内容添加到 grails-app/conf/spring/resoruces.groovy 它将自动注入:
myClass(mypackage.MyClass){bean->
bean.autowire = "byName"
}
到目前为止,这适用于任何版本的 grails,就像我说的你甚至可以使用 3rd 方 jars - 例如,我的 resources.groovy 中总是有以下内容:
jdbcTemplate(org.springframework.jdbc.core.JdbcTemplate){
dataSource = ref('dataSource')
}
有关更全面的 Spring/Grails 文档,请参阅:
【讨论】: