Próbuję uzyskać dostęp do grailsApplication
w groovy klasy pod src/groovy
, ale otrzymuję wyjątek wskaźnika pustego. Próbowałem również wprowadzić usługę do tej samej klasy i tego samego wyniku. Jak uzyskać dostęp do grailsApplication
lub usługi z klasy groovy? (Używam Grails 1.3.7)Dostęp do grailsApplication lub Service w groovy klasie
Odpowiedz
Wstrzyknięcie zależności nie działa dla klas groovych pod src/groovy
. Można uzyskać dostęp do grailsApplication
wykorzystaniem ApplicationHolder
takiego:
import org.codehaus.groovy.grails.commons.ApplicationHolder
def grailsApplication = ApplicationHolder.application
można uzyskać dostęp do wszystkich usług tak:
def allServicesArtefacts = grailsApplication.services
to działało jak czar! Wielkie dzięki ! –
Dla grails 1.3.7 to idealne rozwiązanie. Jednak dla Grails v2 + powinieneś użyć rozwiązania od Tobias Kraft. – Archer
Klasa ApplicationHolder jest przestarzałe w nowszych wersjach Grails (2,0 i powyżej).
Jest też inny sposób, który jest opisany w jednym z Burta blogposts: http://burtbeckwith.com/blog/?p=1017
świetne informacje! dzięki! – Archer
Zastanawiam się, dlaczego wycofali swoich posiadaczy, a następnie kazali nam pisać własnych posiadaczy. Jeśli wzór nie jest wadliwy, dlaczego po prostu nie naprawili implementacji? –
Post na blogu często zostaje usunięty - dla dobra potomności, proszę podać faktyczną odpowiedź w swoim poście, a nie tylko link! – nickdos
Jeśli masz zajęcia, które mają uczestniczyć z wstrzykiwania zależności od src/porywające lub src/JAVA lub nawet 3rd słoików wszystko co partyjnych musisz je skonfigurować w grails-app/conf/spring/resources.groovy.
Jeśli miał mypackage.MyClass klasy w katalogu src/groove, które wyglądały tak:
package mypackage
class MyClass{
def grailsApplication
def myMethod(){
//uses grailsApplication
}
}
następnie dodanie następujących do grails-app/conf/wiosna/resoruces.groovy byłoby uzyskać auto-rdzeniowych:
myClass(mypackage.MyClass){bean->
bean.autowire = "byName"
}
ta będzie działać w każdej wersji Grails thusfar, i jak powiedziałem można nawet użyć słoików 3rd party - na przykład zawsze mam następujących w moim resources.groovy:
jdbcTemplate(org.springframework.jdbc.core.JdbcTemplate){
dataSource = ref('dataSource')
}
Dla bardziej kompleksowej Wiosna/dokumentacją Grails patrz:
Po Grails 2.0, należy użyć:
def grailsApplication = Holders.grailsApplication
możliwe duplikat [Grails zastrzyku usług 2.x w Groovy/src] (http://stackoverflow.com/questions/10640480/grails-2-x-service-injection-in-groovy-src) – ataylor