Grails 2.x service injection in Groovy/src

后端 未结 4 1111
醉酒成梦
醉酒成梦 2020-12-16 17:10

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

相关标签:
4条回答
  • 2020-12-16 17:42

    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) {}
    }
    
    0 讨论(0)
  • 2020-12-16 17:46

    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'
    
    0 讨论(0)
  • 2020-12-16 17:47

    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
    
    0 讨论(0)
  • 2020-12-16 18:09

    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?

    0 讨论(0)
提交回复
热议问题