1.PropertyPlaceholderConfigurer & <context:property-placeholder />
--单个PropertyPlaceholderConfigurer
ApplicationContext.xml
<context:property-placeholder location="classpath:test.properties,classpath:test1.properties"/>
test.properties
student.id=1000 student.name=siyuan
test1.properties
student.id=10001 student.name=siyuan1
注入(占位符${...})
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component("stu")
public class Student {
@Value("${student.id}")
private int id;
@Value("${student.name}")
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Test.java
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.siyuan.test.spring.Student;
public class Test {
public static void main(String[] args) {
ApplicationContext ctxt = new ClassPathXmlApplicationContext("ApplicationContext.xml");
Student stu = (Student) ctxt.getBean("stu");
System.out.println(stu.getId() + ":" + stu.getName());
}
}
输出结果
10001:siyuan1
结论:多个properties按先后顺序加载,重复则覆盖
--多个PropertyPlaceholderConfigurer
ApplicationContext.xml
<context:property-placeholder location="classpath:test.properties"/> <context:property-placeholder location="classpath:test1.properties"/>
输出结果
1000:siyuan
结论:按先后顺序加载,重复则忽略,即先加载的优先级高
改变优先级
ApplicationContext.xml
<context:property-placeholder location="classpath:test.properties" order="2"/> <context:property-placeholder location="classpath:test1.properties" order="1"/>
输出结果
10001:siyuan1
结论:可通过设置order属性改变优先级,优先级按order从小到大排序,即order小的优先级高
2.PropertiesFactoryBean & <util:properties/>
配置:
<util:properties id="studentProp" location="classpath:test.properties"/>
注入(SpEL):
@Value("#{studentProp['student.id']}")