zoukankan      html  css  js  c++  java
  • 编程方式取得Spring上下文的Properties

    spring初始化时,可以使用Properties配置器把properties文件装载到Spring的上下文中。

     

    Xml代码  收藏代码
    1. ...  
    2. xmlns:context="http://www.springframework.org/schema/context"  
    3.   
    4. xsi:schemaLocation=“http://www.springframework.org/schema/context  
    5.                 http://www.springframework.org/schema/context/spring-context-3.0.xsd”  
    6.   
    7. ...  
    8.   
    9. <context:property-placeholder location="classpath:dataSource.properties" />  

     

    这样在Spring的配置文件中可以用表达式来获得load进来的properties内容,例如:

     

    Xml代码  收藏代码
    1. <property name="url" value="${url}" />  
    2. <property name="username" value="${username}" />  
    3. <property name="password" value="${password}" />  

     

    有时候我们在程序中也需要用到这些配置,那么如何取值,显然不能使用${}方式的。

    这时要决定用什么方式来获取properties了,最方便的当然是直接读取文件,此处省略。

    如果程序一定要用通过Spring加载的properties,那么我们首先要得到Context了。

     

    1、FileSystemXmlApplicationContext——从指定的目录中加载:

     

    Java代码  收藏代码
    1. ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml");  

     

    2、ClassPathXmlApplicationContext——从classpath路径加载:

    Java代码  收藏代码
    1. ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");  

     

    3、参照http://blog.csdn.net/dqatsh/article/details/3469278, 通过web.xml来获取Context。

     

    4、在servlet中获取。

     

    Java代码  收藏代码
    1. ServletContext servletContext = servlet.getServletContext();     
    2. WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);  

     

    然后可以通过相应的bean去访问需要的properties(spring配置文件中${}方式设置到bean里)的值,这里不记录。

     

     

    用PropertyPlaceholderConfigurer在加载上下文的时候暴露properties

     

    Java代码  收藏代码
    1. <bean id="configBean"   
    2.  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">   
    3.             <property name="location">   
    4.                 <value>hello.properties</value>   
    5.             </property>   
    6. </bean>   

     

    表明PropertyPlaceholderConfigurer是承担properties读取任务的类。

     

    下面的类继承PropertyPlaceholderConfigurer,通过重写processProperties方法把properties暴露出去了。

     

    Java代码  收藏代码
    1. import java.util.HashMap;  
    2. import java.util.Map;  
    3. import java.util.Properties;  
    4.   
    5. import org.springframework.beans.BeansException;  
    6. import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;  
    7. import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;  
    8.   
    9. public class CustomizedPropertyConfigurer extends PropertyPlaceholderConfigurer {  
    10.   
    11.     private static Map<String, Object> ctxPropertiesMap;  
    12.   
    13.     @Override  
    14.     protected void processProperties(ConfigurableListableBeanFactory beanFactory,  
    15.             Properties props)throws BeansException {  
    16.   
    17.         super.processProperties(beanFactory, props);  
    18.         //load properties to ctxPropertiesMap  
    19.         ctxPropertiesMap = new HashMap<String, Object>();  
    20.         for (Object key : props.keySet()) {  
    21.             String keyStr = key.toString();  
    22.             String value = props.getProperty(keyStr);  
    23.             ctxPropertiesMap.put(keyStr, value);  
    24.         }  
    25.     }  
    26.   
    27.     //static method for accessing context properties  
    28.     public static Object getContextProperty(String name) {  
    29.         return ctxPropertiesMap.get(name);  
    30.     }  
    31. }  

     

    这样此类即完成了PropertyPlaceholderConfigurer的任务,同时又提供了上下文properties访问的功能。

    于是在Spring配置文件中把PropertyPlaceholderConfigurer改成CustomizedPropertyConfigurer

     

    Xml代码  收藏代码
    1. <!-- use customized properties configurer to expose properties to program -->  
    2. <bean id="configBean"   
    3.     class="com.payment.taobaoNavigator.util.CustomizedPropertyConfigurer">  
    4.     <property name="location" value="classpath:dataSource.properties" />  
    5. </bean>  
    6. 如果有多个配置文件就要这样写:
    7. <bean id="configBean"
    8.   class="com.payment.taobaoNavigator.util.CustomizedPropertyConfigurer">
    9.    <property name="locations">
    10.      <list>
    11.          <value>classpath:文件1.properties </value>
    12.          <value>classpath:文件2.properties </value>
    13.          <value>classpath:文件3.properties </value>
    14.       </list>
    15.    </property>
    16. </bean>

     

    最后在程序中我们便可以使用CustomizedPropertyConfigurer.getContextProperty()来取得上下文中的properties的值了。

  • 相关阅读:
    eclipse export runnable jar(导出可执行jar包) runnable jar可以执行的
    mave常用指令
    771. Jewels and Stones珠宝数组和石头数组中的字母对应
    624. Maximum Distance in Arrays二重数组中的最大差值距离
    724. Find Pivot Index 找到中轴下标
    605. Can Place Flowers零一间隔种花
    581. Shortest Unsorted Continuous Subarray连续数组中的递增异常情况
    747. Largest Number At Least Twice of Others比所有数字都大两倍的最大数
    643. Maximum Average Subarray I 最大子数组的平均值
    414. Third Maximum Number数组中第三大的数字
  • 原文地址:https://www.cnblogs.com/strive-study/p/5565939.html
Copyright © 2011-2022 走看看