Я пытаюсь получить доступ к grailsApplication
в классе groovy в разделе src/groovy
, но я получаю исключение с нулевым указателем. Я также пытался ввести службу в тот же класс и тот же результат. Как я могу получить доступ к grailsApplication
или к службе из класса groovy? (Я использую Grails 1.3.7)
Доступ к grailsApplication или Service в классе groovy
Ответ 1
Инъекция не работает для классов groovy под src/groovy
. Вы можете получить доступ к grailsApplication
с помощью ApplicationHolder
следующим образом:
import org.codehaus.groovy.grails.commons.ApplicationHolder
def grailsApplication = ApplicationHolder.application
Вы можете получить доступ ко всем таким службам:
def allServicesArtefacts = grailsApplication.services
Ответ 2
Класс ApplicationHolder устарел в новых версиях Grails (2.0 и выше).
Существует еще один способ, описанный в одном из блогов-сообщений Burt: http://burtbeckwith.com/blog/?p=1017
Ответ 3
Если у вас есть классы, которые вы хотите участвовать в инъекции зависимости от src/ groovy или src/java или даже сторонних банках, вам нужно настроить их в grails-app/conf/spring/resources.groovy.
Если у вас есть класс mypackage.MyClass в каталоге src/ groovy, который выглядит так:
package mypackage
class MyClass{
def grailsApplication
def myMethod(){
//uses grailsApplication
}
}
Затем, добавив следующее в grails-app/conf/ spring/resoruces.groovy, он будет автоматически вводиться:
myClass(mypackage.MyClass){bean->
bean.autowire = "byName"
}
Это будет работать в любой версии grails, поэтому, как я уже сказал, вы даже можете использовать сторонние банки - например, я ВСЕГДА имею в своих ресурсах следующее:
jdbcTemplate(org.springframework.jdbc.core.JdbcTemplate){
dataSource = ref('dataSource')
}
Для более подробной документации Spring/Grails см.:
Ответ 4
После Grails 2.0 вы должны использовать:
def grailsApplication = Holders.grailsApplication