出于某些原因,需要往Spring
项目的Environment
里手动设置Property
,但是又由于某些原因,不能使用@PropertySource
注解引入。所以必须通过某些方法,手动设置。
怎么做
1.首先实现ApplicationContextInitializer<ConfigurableApplicationContext>
接口
public class MyApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
@Override
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
Map<String, Object> props = new HashMap<>();
props.put("hello1", "value1");
PropertySource propertySource = new MapPropertySource("myPropertySource", props);
configurableApplicationContext.getEnvironment().getPropertySources().addLast(propertySource);
}
}
2.在web.xml
添加
<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>com.laomei.test.spring.MyApplicationContextInitializer</param-value>
</context-param>
就是这么简单,我们实现了手动往Environment
设置property
的功能。
原理
Spring
启动时,会从ServletContext
里获取名为contextInitializerClasses
的配置项内容,,因为我们在web.xml
配置了此配置项,它的值为ApplicationContextInitializer
实现类类名。 获取到我们配置的ApplicationContextInitializer
实现类后,调用其initialize
方法。
我们自定义实现的MyApplicationContextInitializer
类,在initialize
方法内,往environment
里添加了新的PropertySource
,实现了手动设置environment
功能。