在我的一些现有的代码只是检查,我使用this method described by Burt Beckwith
创建一个新的文件:src/groovy/ctx/ApplicationContextHolder.groovy
package ctx
import org.springframework.context.ApplicationContext
import org.springframework.context.ApplicationContextAware
import javax.servlet.ServletContext
import org.codehaus.groovy.grails.commons.GrailsApplication
import org.codehaus.groovy.grails.plugins.GrailsPluginManager
import org.springframework.context.ApplicationContext
import org.springframework.context.ApplicationContextAware
@Singleton
class ApplicationContextHolder implements ApplicationContextAware {
private ApplicationContext ctx
private static final Map<String, Object> TEST_BEANS = [:]
void setApplicationContext(ApplicationContext applicationContext) {
ctx = applicationContext
}
static ApplicationContext getApplicationContext() {
getInstance().ctx
}
static Object getBean(String name) {
TEST_BEANS[name] ?: getApplicationContext().getBean(name)
}
static GrailsApplication getGrailsApplication() {
getBean('grailsApplication')
}
static ConfigObject getConfig() {
getGrailsApplication().config
}
static ServletContext getServletContext() {
getBean('servletContext')
}
static GrailsPluginManager getPluginManager() {
getBean('pluginManager')
}
// For testing
static void registerTestBean(String name, bean) {
TEST_BEANS[name] = bean
}
// For testing
static void unregisterTestBeans() {
TEST_BEANS.clear()
}
}
然后,编辑grails-app/config/spring/resources.groovy
包括:
applicationContextHolder(ctx.ApplicationContextHolder) { bean ->
bean.factoryMethod = 'getInstance'
}
然后,在src/java
或src/groovy
内的文件中,您可以拨打:
GrailsApplication app = ApplicationContextHolder.getGrailsApplication() ;
ConfigObject config = app.getConfig() ;
[接受问题的接受答案](http://stackoverflow.com/a/7136095/6509)中的第二种方法有什么问题? –
你好,蒂姆,欢呼回答。我将我的java类作为一个bean放入资源文件(具有grailsApplication的属性和grailsApplication的参数),并将以下代码行添加到我的类中:private GrailsApplication grailsApplication;与getter和setter。但是当我尝试通过ConfigObject config = grailsApplication.getConfig()来访问它时,它似乎是零和错误了。任何想法我做错了什么?谢谢 – Illu
你在哪里试图访问它?你不能在构造函数中使用依赖注入的bean,例如,你需要声明一个用'@ PostConstruct'注解的方法,并把需要'grailsApplication'的逻辑代替,或者使用构造函数参数注入来代替二传手注射。 –