spring中xml解析属性占位符

直接从Environment中检索属性是非常方便的,尤其是在Java配置中装配bean的时候。但是,Spring也提供了通过占位符装配属性的方法,这些占位符的值会来源于一个属性源。
Spring一直支持将属性定义到外部的属性的文件中,并使用占位符值将其插入到Spring bean中。在Spring装配中,占位符的形式为使用“${… }”包装的属性名称。例如:
如下是一个BlankDisc类:

public class BlankDisc {
    private String title;
    public BlankDisc(String title){
        this.title = title;
    }

    public void play(){
        System.out.println(title);
    }
}

其中title属性我们通过XML占位符注入,XML如下:

<?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:c="http://www.springframework.org/schema/c"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd">
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="com/yhw/pojo3/app.properties"/>
    </bean>
    <bean id="blankDisc" class="com.yhw.pojo3.BlankDisc"
          c:title="${disc.title}"/>
</beans>

可以看到xml配置了一个PropertyPlaceholderConfigurer bean,要使用占位符就必须配置这个bean或者配置PropertySourcesPlaceholderConfigurer bean。
那么${disc.title}就可以解析.properties里的属性并注入bean。下面是app.properties文件:

disc.title=Rock and Role

下面上测试代码

package com.yhw.pojo3;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "../../../spring-config.xml")      //路径根据自己项目确定
public class MainTest {

    @Test
    public void play(){
        ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        BlankDisc blankDisc = (BlankDisc) context.getBean("blankDisc"); //通过配置文件获取bean
        blankDisc.play();
    }
}

测试结果
spring中xml解析属性占位符_第1张图片

你可能感兴趣的:(Java)