applicationContext.xml配置文件
birthday.properties属性文件
name.properties属性文件
SpringPropertyResourceReader.java
测试代码Main.java
- <?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>
birthday.properties属性文件
- birthday=2012-12-12
name.properties属性文件
- name=kid
SpringPropertyResourceReader.java
- 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);
- }
- }
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);
}
}
测试代码Main.java
- 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"));
- }
- }