Spring Gets the value propertise file

Spring obtain propertise way, except @value before Bowen mentioned annotation injection, may also be obtained by coding the way, this is mainly talking about the use of EmbeddedValueResolverAware to use interface.

First, prepare propertise file

In the resource file folder that was created under app.propertise tests we need to be good, which is written a few test data, the data shown in this paper.

 

Second, prepare profiles

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

Guess you like

Origin www.cnblogs.com/wsy0202/p/11236819.html