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,通过工具类,传入需要获取的参数名,获取对应的参数值。

  • 相关阅读:
    背水一战 Windows 10 (90)
    背水一战 Windows 10 (89)
    背水一战 Windows 10 (88)
    背水一战 Windows 10 (87)
    背水一战 Windows 10 (86)
    背水一战 Windows 10 (85)
    背水一战 Windows 10 (84)
    背水一战 Windows 10 (83)
    背水一战 Windows 10 (82)
    背水一战 Windows 10 (81)
  • 原文地址:https://www.cnblogs.com/lilin0719/p/5406497.html
Copyright © 2011-2022 走看看