获取Spring中PropertyPlaceholderConfigurer的属性

获取Spring中PropertyPlaceholderConfigurer的属性

博客分类: 

·        Spring

springjava 

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.  }  


测试代码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.   }  

 

转载于:https://my.oschina.net/lsl1991/blog/806608

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值