zoukankan      html  css  js  c++  java
  • Spring 获取propertise文件中的值

    Spring 获取propertise文件中的值

      Spring 获取propertise的方式,除了之前的博文提到的使用@value的注解注入之外,还可以通过编码的方式获取,这里主要说的是要使用EmbeddedValueResolverAware接口的使用。

    一、准备propertise文件

    在资源文件夹下面建立好要测试需要的app.propertise文件,里面写几条测试数据,本文主要如图数据。

    二、准备配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd 
        http://www.springframework.org/schema/context  
        http://www.springframework.org/schema/context/spring-context.xsd">
        <context:component-scan base-package="com.lilin"></context:component-scan>
    
        <!-- spring的属性加载器,加载properties文件中的属性 -->
        <bean id="propertyConfigurer"
            class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="location">
                <value>classpath:app.properties</value>
            </property>
            <property name="fileEncoding" value="utf-8" />
        </bean>
    
    </beans>

    配置文件中主要包含了两部分,都是用于测试的,一个是注解扫描的路径定义,让后面的测试类,在当前的扫描路径下,可以让spring管理be;一个是propertise文件的加载配置PropertyPlaceholderConfigurer,配置文件的读取路径和编码方式。

    三、准备工具类

    package com.lilin.maven.service.dynamicBean;
    
    import org.springframework.context.EmbeddedValueResolverAware;
    import org.springframework.stereotype.Service;
    import org.springframework.util.StringValueResolver;
    
    @Service
    public class PropertiesUtils implements EmbeddedValueResolverAware {
    
        private StringValueResolver stringValueResolver;
    
        @Override
        public void setEmbeddedValueResolver(StringValueResolver resolver) {
            stringValueResolver = resolver;
        }
    
        public String getPropertiesValue(String name) {
            name = "${" + name + "}";
            return stringValueResolver.resolveStringValue(name);
        }
    }

    工具类实现EmbeddedValueResolverAware接口,实现必须的setEmbeddedValueResolver方法,把方法的resolver参数,赋值给当前工具类的私有属性,同时暴露出对外的提取函数getPropertiesValue,通过名称获取当前的对应的值。特别注意的是,resolveStringValue函数接受的name参数一定是转换成“${name}”的方式才行,否则是取不到值的。

    四、准备测试类

    /**
     * 
     */
    package com.lilin.maven.service.dynamicBean;
    
    import javax.annotation.Resource;
    
    import org.springframework.test.context.ContextConfiguration;
    import org.testng.annotations.Test;
    
    import com.lilin.maven.service.BaseTest;
    
    /**
     * @author lilin
     * 
     */
    @ContextConfiguration(locations = { "classpath:/config/spring/spring-test.xml" })
    public class DynamicBeanTest extends BaseTest {
    
        @Resource
        private PropertiesUtils propertiesUtils;
    
        @Test
        public void test() {
            String beanName = propertiesUtils.getPropertiesValue("a");
            System.out.println(beanName);
            String beanName1 = propertiesUtils.getPropertiesValue("b");
            System.out.println(beanName1);
        }
    }

    测试类,主要使用testNG的测试方式,testNG的使用在前面的博文中已经有所介绍,请自行参阅。测试类中,把工具类注入PropertiesUtils,通过工具类,传入需要获取的参数名,获取对应的参数值。

  • 相关阅读:
    双六
    除法取模
    欧拉函数及费马小定理
    基础模运算
    Leeetcode--581. Shortest Unsorted Continuous Subarray
    Codeforces Round #541--1131F. Asya And Kittens(基础并查集)
    leetcode--200. Number of Islands
    leetcode--21. Merge Two Sorted Lists
    leetcode--155. Min Stack
    Codeforces Round #539--1113B
  • 原文地址:https://www.cnblogs.com/lilin0719/p/5406497.html
Copyright © 2011-2022 走看看