Grails初始化

时间:2014-08-28 11:15:18

标签: spring grails

在我的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.groovyConfig.load("/conf.properties")的第一行触发此类的初始化。但是,各种Spring bean的初始化需要Config公开的属性,但是在执行Bootstrap.groovy时,Spring初始化已经完成。

所以我需要找到一种在构造Spring bean之前调用Config.load()的方法,这可能吗?我想/script/_Events.groovy中可能有一个可以调用它的事件处理程序,但是我不确定哪些处理程序可用。

不幸的是,更改Config.java的源代码不是一个选项,也不会消除我对此类的使用。

1 个答案:

答案 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="...">