简体   繁体   中英

Access grailsApplication or Service in groovy class

I am trying to access grailsApplication in groovy class under src/groovy but I get a null pointer exception. I also tried to inject a service into the same class and same result. How can I access grailsApplication or a service from groovy class? (I am using Grails 1.3.7)

The ApplicationHolder class is deprecated in newer Grails versions (2.0 and above).

There is another way, which is described in one of Burt's blogposts: http://burtbeckwith.com/blog/?p=1017

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

 def grailsApplication = Holders.grailsApplication

Dependency injection does not work for groovy classes under src/groovy . You can get the access to grailsApplication using ApplicationHolder like this:

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

def grailsApplication = ApplicationHolder.application

You can access all services like this:

def allServicesArtefacts = grailsApplication.services

If you have classes that you want to participate with dependency injection from src/groovy or src/java or even 3rd party jars all you have to do is configure them in grails-app/conf/spring/resources.groovy.

If you had the class mypackage.MyClass in your src/groovy directory that looked like this:

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

Then by adding the following to grails-app/conf/spring/resoruces.groovy it would get auto-injected:

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

This will work in any version of grails thusfar, and like I said you can even use 3rd party jars - for example I ALWAYS have the following in my resources.groovy:

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

For more comprehensive Spring/Grails documentation see:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM