Spring Java 注解配置之 properties文件注入

全局配置文件注入

由于Spring存在2个应用上下文,一个是WebApplicationContext,另一个是ServletApplicationContextInitializer。它们两者之间有的bean实例是不通用的。比如本文要使用PropertyPlaceholderConfigurer类实例。

第一步、配置文件扫描

将properties文件都放在classpath下,可以自定义目录。例如我就放在了resources/config目录下,主要是为了自己方便查找。


Spring Java 注解配置之 properties文件注入_第1张图片
image.png

使用PropertiesFactoryBean扫描全部的properties文件。

/** 加载配置文件 */
    @Bean("propertiesBean")
    public PropertiesFactoryBean propertiesFactoryBean() throws IOException {
        PropertiesFactoryBean factoryBean = new PropertiesFactoryBean();
        factoryBean.setLocations(ResourceUtil.getResources("classpath:config/*.properties"));

        return factoryBean;
    }

其中ResourceUtil是自己根据PathMatchingResourcePatternResolver封装的一个工具类,主要是为了代码整洁。源码如下:

public class ResourceUtil {
    public static Resource getResource(String location) {
        return resolver().getResource(location);
    }

    public static Resource[] getResources(String locationPattern) throws IOException {
        return resolver().getResources(locationPattern);
    }

    public static PathMatchingResourcePatternResolver resolver() {
        return new PathMatchingResourcePatternResolver();
    }
}

第二步、将配置注入应用上下文

使用PropertyPlaceholderConfigurer将配置内容注入上下文,该bean必须是static方法,否则启动会异常告警。

由于开始说了spring mvc 存在2个应用上下文,所以在使用该类进行配置注入的时候需要分别在ServletRootConfig.classServletWebConfig.class中都要写上该方法。

/** 注入配置文件 */
    @Bean("propertyPlaceholderConfigurer")
    public static PropertyPlaceholderConfigurer propertyPlaceholderConfigurer(@Qualifier("propertiesBean") Properties properties) throws IOException {
        PropertyPlaceholderConfigurer configurer = new PropertyPlaceholderConfigurer();
        configurer.setProperties(properties);

        return configurer;
    }

第三步、使用配置内容

有了以上配置后,你就可以在 Service、Controller 等任意bean中使用@Value注解注入properties文件的配置了。

eg:

@Value("${value}")
private String value;

你可能感兴趣的:(Spring Java 注解配置之 properties文件注入)