在我的Grails应用程序中,我需要访问类似于以下
的Java类公开的配置public class Config {
private Properties properties = new Properties();
static load(String path) {
File configFile = new File(path);
FileReader fileReader = new FileReader(configFile);
properties.load(fileReader);
}
String getProperty(String name) {
properties.getProperty(name);
}
}
我通过调用Bootstrap.groovy
在Config.load("/conf.properties")
的第一行触发此类的初始化。但是,各种Spring bean的初始化需要Config
公开的属性,但是在执行Bootstrap.groovy
时,Spring初始化已经完成。
所以我需要找到一种在构造Spring bean之前调用Config.load()
的方法,这可能吗?我想/script/_Events.groovy
中可能有一个可以调用它的事件处理程序,但是我不确定哪些处理程序可用。
不幸的是,更改Config.java
的源代码不是一个选项,也不会消除我对此类的使用。
答案 0 :(得分:1)
您可以尝试在web-app/WEB-INF/applicationContext.xml
中声明一个合适的bean,这是根Web应用程序上下文的定义,而不是GrailsApplication的内部上下文。
<bean id="initConfig" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="com.example.Config" />
<property name="targetMethod" value="load" />
<property name="arguments">
<list><value>/conf.properties</value></list>
</property>
</bean>
并修改grailsApplication
bean以依赖于它:
<bean id="grailsApplication" depends-on="initConfig" class="...">