`

编程方式取得Spring上下文的Properties

    博客分类:
  • java
 
阅读更多
 

在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>  

 

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

分享到:
评论

相关推荐

    Spring Cloud dalston 中文文档 参考手册

    服务引导应用程序上下文是Spring Cloud的特色之一,它允许应用程序在启动时进行微服务的引导。开发者可以利用应用程序上下文层次结构来组织和配置微服务,改变引导位置以适应不同的部署需求。 此外,Spring Cloud...

    netty4与spring集成

    1. **Spring 上下文**: 在集成中,我们需要将 Netty 服务器配置到 Spring 的上下文中,这样可以通过 Spring 管理 Netty 的生命周期,如启动、停止等。这可以通过创建一个 `ApplicationContext` 并在其内部注册 Netty...

    Spring Cloud 中文文档.pdf

    - **Spring Cloud 上下文**:指的是一种应用程序上下文服务,它可以被用来初始化、管理和销毁应用程序中的组件。Spring Cloud 提供了一系列的自动配置来简化这一过程。 - **引导应用程序上下文**:是指应用程序启动...

    Spring Cloud 中文文档 参考手册 中文版2018

    文档中提到了Spring Cloud上下文,这涉及应用程序上下文的管理,包括服务引导应用程序上下文。应用程序上下文层次结构可以改变引导位置,也就是说,Spring Cloud允许开发者通过配置改变应用程序上下文启动的优先级。...

    spring-frameword3.0源码

    3. `org.springframework.context`:这是Spring的核心模块,提供了上下文容器,管理Bean的生命周期和依赖关系。在这个模块中,我们可以深入理解BeanFactory和ApplicationContext的区别,以及如何自定义bean的初始化...

    Spring配置文件集合

    它是Spring应用上下文的基础,包含了所有业务对象和服务的配置。 通过这些配置文件的组合,我们可以构建出一个完整的Spring驱动的JavaWeb应用,涵盖了从数据访问到业务逻辑,再到用户界面的完整流程。Spring的这些...

    注解方式搭建springmvc+spring+ibatis

    在这里,我们设置了应用的显示名称和描述,定义了ServletContext初始化参数,如log4j配置位置和Spring上下文配置的位置。此外,还配置了字符编码过滤器以确保数据不出现乱码问题。最后,配置了Spring Security过滤器...

    spring cloud中文文档

    1. **Spring Cloud上下文**:包括应用程序上下文服务的引导,应用程序上下文层次结构的建立,以及改变引导位置。例如,可以覆盖远程的Properties值,自定义引导配置和属性源。此外,还讨论了环境变化时刷新的范围和...

    Spring依赖包和配置文件

    2. **applicationContext.xml**:此文件通常用于定义整个应用上下文,包含所有bean的定义,是Spring应用的主配置文件。 3. **web.xml**:虽然不是Spring框架的一部分,但在Spring MVC应用中,它是部署描述符,用于...

    Spring Cloud Dalston 中文文档 参考手册 中文版1

    * Spring Cloud 上下文:应用程序上下文服务引导 * 应用程序上下文层次结构:改变引导位置、Properties 覆盖远程 Properties 的值 * 自定义引导配置:自定义引导属性源、环境变化刷新范围 * 加密和解密端点:用于...

    Spring Security学习总结一

    该框架的核心优势在于其高度的可配置性和灵活性,它通过一组可在Spring应用上下文中配置的Bean,利用Spring的IoC(依赖注入)和AOP(面向切面编程)特性,为应用提供声明式安全访问控制功能。 Spring Security覆盖...

    读properties和事务demo

    如`org.springframework.beans`, `org.springframework.context`, `org.springframework.orm`, `org.springframework.jdbc`等,这些都是Spring框架的重要组成部分,用于处理bean管理、上下文、ORM(对象关系映射)和...

    spring cloud 中文文档

    - **引导应用程序上下文**:描述了如何通过配置文件(如`application.yml`或`application.properties`)初始化Spring应用程序上下文。 - **应用程序上下文层次结构**:阐述了Spring Cloud如何支持不同级别的上下文...

    spring+redis作为缓存,带springTest配置

    在这个项目中,`src`目录下可能包含了测试代码,测试类可能使用了`@RunWith(SpringRunner.class)`和`@SpringBootTest`注解来启动Spring应用上下文,然后使用`@Autowired`注解注入需要测试的服务,配合`@Test`注解...

    spring约束dtd.zip

    3. `spring-context-4.0.xsd`:这个DTD文件关注于Spring上下文,它扩展了bean配置,引入了事件监听、国际化、资源处理、AOP等高级特性。如`&lt;context:component-scan&gt;`用于自动扫描并注册bean,`...

    Spring系列面试题129道(附答案解析)

    Spring的内部bean是指在另一个bean的属性中定义的bean,它仅在包含它的外部bean的上下文中存在。 22、什么是spring装配。 Spring装配是指将对象组装到一起,并设置它们之间的依赖关系的过程。 23、自动装配有哪些...

    spring in action 4th 源码

    5. `org`:此目录很可能包含了Spring框架相关的源代码组织结构,Spring框架的代码通常按照功能模块进行组织,如`org.springframework.context`对应上下文模块,`org.springframework.web`对应Web相关的支持。...

    Spring中关于Bean的管理的课件

    4. **Spring的应用上下文(ApplicationContext)**:ApplicationContext是Spring的主要接口之一,它提供了获取Bean、处理消息和事件等功能,是Spring应用中的主要入口点。 5. **构造注入(constructor injection)*...

    Spring6个核心包

    ApplicationContext提供了更丰富的上下文环境,如事件发布、国际化、资源加载等功能。它允许开发者在运行时获取bean,并且能够处理更加复杂的bean关系,如AOP(Aspect Oriented Programming,面向切面编程)。 4. *...

    《Spring 深度整合指南》.

    7. `config.xml`:这是Spring应用上下文的主要配置文件,包含了bean的定义和其他配置信息。开发者在此文件中声明服务、数据源、事务管理器等,定义bean的依赖注入。 8. `conf`:通常是一个包含其他配置文件的目录,...

Global site tag (gtag.js) - Google Analytics