2013-01-17 23 views
10

我想在src/groovy下的groovy类中访问grailsApplication,但我得到一个空指针异常。我也尝试将服务注入相同的类和相同的结果。我如何访问grailsApplication或groovy课程的服务? (我正在使用Grails 1.3.7)在groovy类中访问grailsApplication或Service

+0

在Groovy [Grails的2.x的服务注入的可能重复/ src](http://stackoverflow.com/questions/10640480/grails-2-x-service-injection-in-groovy-src) – ataylor

回答

5

根据src/groovy,依赖注入不适用于groovy类。你可以访问使用ApplicationHolder这样grailsApplication

import org.codehaus.groovy.grails.commons.ApplicationHolder 

def grailsApplication = ApplicationHolder.application 

您可以访问所有类似的服务:

def allServicesArtefacts = grailsApplication.services 
+0

这工作就像一个魅力!非常感谢 ! –

+3

对于Grails 1.3.7,这是一个完美的解决方案。但对于Grails v2 +,您应该使用Tobias Kraft的解决方案。 – Archer

9

的ApplicationHolder类是在新的Grails的版本(2.0及以上),不推荐使用。

还有另外一种方法,这是在伯氏的相关博客文章的一个描述:http://burtbeckwith.com/blog/?p=1017

+1

伟大的信息!谢谢! – Archer

+1

我不知道他们为什么弃用他们的持有人,然后告诉我们写我们自己的持有人。如果模式没有缺陷,为什么他们不解决它们的实现? –

+5

博客文章经常被删除 - 对于后人的说法,请在您的文章中包含实际答案,而不仅仅是一个链接! – nickdos

2

如果您有想要与SRC /常规或SRC/java或甚至第三方罐子你依赖注入参加班必须做的是在grails-app/conf/spring/resources.groovy中配置它们。

如果你有在你的src /常规目录类mypackage.MyClass是这个样子:

package mypackage 
class MyClass{ 
    def grailsApplication 
    def myMethod(){ 
     //uses grailsApplication 
    } 
} 

然后通过添加以下内容的grails-app/conf目录/春/ resoruces.groovy它会得到自动注射:

myClass(mypackage.MyClass){bean-> 
    bean.autowire = "byName"  
} 

这将Grails中的任何版本thusfar,就像我说的,你甚至可以使用第三方jar文件 - 例如我永远在我resources.groovy如下:

jdbcTemplate(org.springframework.jdbc.core.JdbcTemplate){ 
    dataSource = ref('dataSource') 
} 

了解更全面的春/ Grails的文档,请参见:

http://grails.github.io/grails-doc/latest/guide/spring.html

1

Grails的2.0之后,你应该使用:

def grailsApplication = Holders.grailsApplication