I\'d like to inject my service in Groovy/src class. The normaln dependency injection doesn\'t work:
...
def myService
...
I\'m able to use
Yo can do it from the resources.groovy
:
// src/groovy/com/example/MyClass.groovy
class MyClass {
def myService
...
}
// resources.groovy
beans = {
myclass(com.example.MyClass) {
myService = ref('myService')
}
}
or just using the autowired anotation:
// src/groovy/com/example/MyClass.groovy
import org.springframework.beans.factory.annotation.Autowired
class MyClass {
@Autowired
def myService
...
}
// resources.groovy
beans = {
myclass(com.example.MyClass) {}
}
The replacement of ApplicationHolder can be Holders, you can also use it in static scope:
import grails.util.Holders
...
def myService = Holders.grailsApplication.mainContext.getBean 'myService'
Check following Grails FAQ to get access to the application context from sources in src/groovy - http://grails.org/FAQ#Q: How do I get access to the application context from sources in src/groovy?
There is no ApplicationContextHolder class equivalent to ApplicationHolder. To access to a service class called EmailService from a Groovy class in src/groovy, access the Spring bean using:
import org.codehaus.groovy.grails.web.context.ServletContextHolder as SCH
import org.codehaus.groovy.grails.web.servlet.GrailsApplicationAttributes as GA
def ctx = SCH.servletContext.getAttribute(GA.APPLICATION_CONTEXT)
def emailService = ctx.emailService
You can easily register new (or override existing) beans by configuring them in grails-app/conf/spring/resources.groovy
:
// src/groovy/com/example/MyClass.groovy
class MyClass {
def myService
...
}
// resources.groovy
beans = {
myclass(com.example.MyClass) {
myService = ref('myService')
}
}
Also you can check this question about How to access Grails configuration in Grails 2.0?