在Spring上下文初始化之前执行Java代码块

4
在我的应用程序中,Spring配置文件的导入是基于环境属性的,例如以下示例:
<import resource="classpath:/springcontext/text/dao_${environment}.xml" />

我们知道,在创建bean(property-placeholder)之前,Spring配置导入已经被解析。

但是我的要求是从Java代码中将“环境”设置为系统属性,因为环境值不是常量,它必须基于一些逻辑设置在Spring配置导入之前。我是否可以在某种程度上协助Spring实现这一点。


1
你是在谈论一个Web应用程序还是独立应用程序,同时你是使用基于Java的配置还是基于XML的配置? - Akash Yadav
感谢您的回复。这是一个基于Web应用程序和XML配置的内容。 - user1283041
2
这就是为什么存在 ApplicationContextInitializer 接口。创建一个实现它的类,注册它,然后就完成了。另外,你真的需要在代码中这样做吗?为什么不直接将 spring.profiles.active 设置为环境变量呢? - M. Deinum
同时,不要从Java中将其设置为系统属性。你可以通过ApplicationContextInitializer指定哪个配置文件是活动的。 - M. Deinum
1个回答

3
正如@M. Denium所指出的那样,您可以使用接口ApplicationContextInitializer来满足此需求。
来自Spring文档: public interface ApplicationContextInitializer 在刷新之前初始化Spring ConfigurableApplicationContext的回调接口。
通常在需要对应用程序上下文进行一些编程初始化的Web应用程序中使用。例如,注册属性源或针对上下文环境激活配置文件。有关声明"contextInitializerClasses"上下文参数和init-param的ContextLoader和FrameworkServlet支持,请参见文档。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接