博客分类:
·
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.javaJava代码
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. }
测试代码Main.javaJava代码
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. }