编码方式获取Spring中PropertyPlaceholderConfigurer的属性

[size=large]applicationContext.xml配置文件[/size]

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>name.properties</value>
</property>
</bean>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>birthday.properties</value>
</property>
</bean>
</beans>

[size=large]birthday.properties属性文件[/size]

birthday=2012-12-12

[size=large]name.properties属性文件[/size]

name=kid

[size=large]SpringPropertyResourceReader.java[/size]

package utils;
import java.lang.reflect.Method;
import java.util.Properties;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.PropertyResourceConfigurer;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.support.PropertiesLoaderSupport;
public class SpringPropertyResourceReader {
private static ApplicationContext applicationContext=new
ClassPathXmlApplicationContext("applicationContext.xml");
private static AbstractApplicationContext abstractContext =
(AbstractApplicationContext) applicationContext;
private static Properties properties=new Properties();
static{
try{
// get the names of BeanFactoryPostProcessor
String[] postProcessorNames = abstractContext
.getBeanNamesForType(BeanFactoryPostProcessor.class,true,true);

for (String ppName : postProcessorNames) {
// get the specified BeanFactoryPostProcessor
BeanFactoryPostProcessor beanProcessor=
abstractContext.getBean(ppName, BeanFactoryPostProcessor.class);
// check whether the beanFactoryPostProcessor is
// instance of the PropertyResourceConfigurer
// if it is yes then do the process otherwise continue
if(beanProcessor instanceof PropertyResourceConfigurer){
PropertyResourceConfigurer propertyResourceConfigurer=
(PropertyResourceConfigurer) beanProcessor;

// get the method mergeProperties
// in class PropertiesLoaderSupport
Method mergeProperties=PropertiesLoaderSupport.class.
getDeclaredMethod("mergeProperties");
// get the props
mergeProperties.setAccessible(true);
Properties props=(Properties) mergeProperties.
invoke(propertyResourceConfigurer);

// get the method convertProperties
// in class PropertyResourceConfigurer
Method convertProperties=PropertyResourceConfigurer.class.
getDeclaredMethod("convertProperties", Properties.class);
// convert properties
convertProperties.setAccessible(true);
convertProperties.invoke(propertyResourceConfigurer, props);

properties.putAll(props);
}
}

}catch(Exception e){
throw new RuntimeException(e);
}
}

public static String getProperty(String propertyName){
return properties.getProperty(propertyName);
}
}

[size=large]测试代码Main.java[/size]

package main;

import utils.SpringPropertyResourceReader;
public class Main {
public static void main(String[] args) throws Exception {
System.out.println(SpringPropertyResourceReader.getProperty("name"));
System.out.println(SpringPropertyResourceReader.getProperty("birthday"));
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值