2014-08-28 76 views
0

在我的Grails应用程序,我需要通过调用Config.load("/conf.properties")访问由Java类暴露配置类似于下面Grails的初始化

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第一线的初始化。但是,各种Spring bean的初始化需要Config公开的属性,但在执行Bootstrap.groovy时,Spring初始化已经完成。

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

不幸的是,更改Config.java的源代码不是一种选择,也不能消除我对这个类的使用。

+0

有关创建一个Spring bean其初始化过程中调用这个bean是什么? – 2014-08-28 11:34:25

+0

@JoshuaMoore你能否提供一个代码示例,说明我将如何创建一个Spring bean?我需要在构建其他Spring bean之前调用这个Spring bean,并且不知道如何完成此操作。 – 2014-08-28 11:41:28

回答

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="..."> 
+0

谢谢,我会试一试。修改'web-app/WEB-INF/applicationContext.xml'还是只应该在框架内部使用? – 2014-08-28 12:17:06

+0

@Dónal我不明白为什么你不能改变它,但是当你在Grails版本之间升级时,任何改变都将被覆盖,并且必须手动重新设置。 – 2014-08-28 12:30:36