Spring 手动向 Environment 添加 PropertySource

出于某些原因,需要往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功能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值