简而言之,完成此操作的最简单方法是按照属性管理的 spring 文档中“在 Web 应用程序中操作属性源”部分下的说明进行操作。
最后,您通过 context-param 标记从 web.xml 引用自定义类:
<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>com.some.something.PropertyResolver</param-value>
</context-param>
这会强制 spring 在初始化任何 bean 之前加载此代码。然后你的班级可以做这样的事情:
public class PropertyResolver implements ApplicationContextInitializer<ConfigurableWebApplicationContext>{
@Override
public void initialize(ConfigurableWebApplicationContext ctx) {
Map<String, Object> modifiedValues = new HashMap<>();
MutablePropertySources propertySources = ctx.getEnvironment().getPropertySources();
propertySources.forEach(propertySource -> {
String propertySourceName = propertySource.getName();
if (propertySource instanceof MapPropertySource) {
Arrays.stream(((EnumerablePropertySource) propertySource).getPropertyNames())
.forEach(propName -> {
String propValue = (String) propertySource.getProperty(propName);
// do something
});
}
});
}
}