代码来自网络,测试有效
package com.cqjk.util;
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;
/**
*
* @author Administrator
* @ClassName: SpringPropertyResourceReader
* @Description: TODO(获取spring加载的资源文件的属性值)
* @author A18ccms a18ccms_gmail_com
* @date 2014-7-7 上午10:04:01
*/
public class SpringPropertyResourceReader {
private static ApplicationContext applicationContext=new
ClassPathXmlApplicationContext("com/cqjk/config/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=
(BeanFactoryPostProcessor) 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);
}
}