当前位置:首页 > 开发 > 互联网 > 正文

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

发表于: 2013-03-01   作者:antlove   来源:转载   浏览:
摘要: applicationContext.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http:/
applicationContext.xml配置文件
<?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);
	}
}

测试代码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"));
	}
}

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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号