spring中properties文件内容解析

applicationContext.xml配置文件
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3.        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.        xsi:schemaLocation="http://www.springframework.org/schema/beans  
  5.            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">  
  6.     <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  7.         <property name="location">  
  8.             <value>name.properties</value>  
  9.         </property>  
  10.     </bean>  
  11.     <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  12.         <property name="location">  
  13.             <value>birthday.properties</value>  
  14.         </property>  
  15.     </bean>  
  16. </beans>  

birthday.properties属性文件
Properties代码   收藏代码
  1. birthday=2012-12-12  

name.properties属性文件
Properties代码   收藏代码
  1. name=kid  

SpringPropertyResourceReader.java
Java代码   收藏代码
  1. package utils;  
  2. import java.lang.reflect.Method;  
  3. import java.util.Properties;  
  4. import org.springframework.beans.factory.config.BeanFactoryPostProcessor;  
  5. import org.springframework.beans.factory.config.PropertyResourceConfigurer;  
  6. import org.springframework.context.ApplicationContext;  
  7. import org.springframework.context.support.AbstractApplicationContext;  
  8. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  9. import org.springframework.core.io.support.PropertiesLoaderSupport;  
  10. public class SpringPropertyResourceReader {  
  11.     private static ApplicationContext applicationContext=new   
  12.     ClassPathXmlApplicationContext("applicationContext.xml");  
  13.     private static AbstractApplicationContext abstractContext =  
  14.     (AbstractApplicationContext) applicationContext;  
  15.     private static Properties properties=new Properties();  
  16.     static{  
  17.         try{  
  18.             // get the names of BeanFactoryPostProcessor  
  19.             String[] postProcessorNames = abstractContext  
  20.                     .getBeanNamesForType(BeanFactoryPostProcessor.class,true,true);  
  21.               
  22.             for (String ppName : postProcessorNames) {  
  23.                 // get the specified BeanFactoryPostProcessor  
  24.                 BeanFactoryPostProcessor beanProcessor=  
  25.                 abstractContext.getBean(ppName, BeanFactoryPostProcessor.class);  
  26.                 // check whether the beanFactoryPostProcessor is   
  27.                 // instance of the PropertyResourceConfigurer  
  28.                 // if it is yes then do the process otherwise continue  
  29.                 if(beanProcessor instanceof PropertyResourceConfigurer){  
  30.                     PropertyResourceConfigurer propertyResourceConfigurer=  
  31.                             (PropertyResourceConfigurer) beanProcessor;  
  32.                       
  33.                     // get the method mergeProperties   
  34.                     // in class PropertiesLoaderSupport  
  35.                     Method mergeProperties=PropertiesLoaderSupport.class.  
  36.                         getDeclaredMethod("mergeProperties");  
  37.                     // get the props  
  38.                     mergeProperties.setAccessible(true);  
  39.                     Properties props=(Properties) mergeProperties.  
  40.                     invoke(propertyResourceConfigurer);  
  41.                       
  42.                     // get the method convertProperties   
  43.                     // in class PropertyResourceConfigurer  
  44.                     Method convertProperties=PropertyResourceConfigurer.class.  
  45.                     getDeclaredMethod("convertProperties", Properties.class);  
  46.                     // convert properties  
  47.                     convertProperties.setAccessible(true);  
  48.                     convertProperties.invoke(propertyResourceConfigurer, props);  
  49.                       
  50.                     properties.putAll(props);  
  51.                 }  
  52.             }  
  53.               
  54.         }catch(Exception e){  
  55.             throw new RuntimeException(e);  
  56.         }  
  57.     }  
  58.       
  59.     public static String getProperty(String propertyName){  
  60.         return properties.getProperty(propertyName);  
  61.     }  
  62. }  
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
Java代码   收藏代码
  1. package main;  
  2.   
  3. import utils.SpringPropertyResourceReader;  
  4. public class Main {  
  5.     public static void main(String[] args) throws Exception {  
  6.         System.out.println(SpringPropertyResourceReader.getProperty("name"));  
  7.         System.out.println(SpringPropertyResourceReader.getProperty("birthday"));  
  8.     }  
  9. }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值