PropertyPlaceholderConfigurer是BeanFactoryPostProcessor的子类。

通常情况下,我们不想将类似于系统管理相关的信息同业务对象相关的配置信息混杂到XML配置文件中,以免部署或维护期间因为改动复杂的XML配置文件而出现问题。我们会将一些数据库连接信息、邮件服务器等相关信息单独配置到一个properties文件中,这样,如果因系统资源变动的话,只需要关注这些简单的properties配置文件即可。

PropertyPlaceholderConfigurer允许我们在XML配置文件中使用占位符,并将这些占位符所代表的资源单独配置到简单的properties文件中加载。以数据库的配置为例,使用了PropertyPlaceholderConfigurer之后,可以在XML配置文件中使用占位符配置数据源,而不用将连接地址、用户名和密码等都配置到XML中。

XML配置示例如下:

 1 <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
 2     <property name="url">
 3         <value>${jdbc.url}</value>
 4     </property>
 5     <property name="driverClassName">
 6         <value>${jdbc.driver}</value>
 7     </property>
 8     <property name="username">
 9         <value>${jdbc.username}</value>
10     </property>
11     <property name="password">
12         <value>${jdbc.password}</value>
13     </property>
14     <property name="testOnBorrow">
15         <value>true</value>
16     </property>
17     <property name="testOnReturn">
18         <value>true</value>
19     </property>
20     <property name="testWhileIdle">
21         <value>true</value>
22     </property>
23     <property name="minEvictableIdleTimeMillis">
24         <value>180000</value>
25     </property>
26     <property name="timeBetweenEvictableRunsMillis">
27         <value>360000</value>
28     </property>
29     <property name="validationQuery">
30         <value>SELECT 1</value>
31     </property>
32     <property name="maxActive">
33         <value>100</value>
34     </property>
35 </bean>

现在所有这些占位符所代表的资源,都放到了jdbc.properties文件中,如下所示:

jdbc.url = jdbc:mysql://server/MAIN?useUnicode=true&amp;characterEncoding=ms92&amp;failOverReadOnly=false&amp;roundRobinLoadBalance=true
jdbc.driver = com.musql.jdbc.Driver
jdbc.username = your username
jdbc.password = your password

BeanFactory在第一阶段加载完成所有配置信息时,BeanFactory中保存的对象的属性信息还只是以占位符的形式存在。当其进入容器实现的第二阶段实例化bean时,bean定义中的属性值将被properties文件中的配置信息所替换。

PropertyPlaceholderConfigurer不单会从其配置的properties文件中加载配置项,同时还会检查Java的System类中的Properties,可以通过setSystemPropertieMode()或者setSystemPropertiesModeName()来控制是否加载或覆盖System相应Properties的行为。PropertiesPlaceholderConfigurer提供了SYSTEM_PROPERTIES_MODE_FALLBACK、SYSTEM_PROPERTIES_MODE_NEVER和SYSTEM_PROPERTIES_MODE_OVERRIDE三种模式。默认采用的是SYSTEM_PROPERTIES_MODE_FALLBACK,即如果properties配置文件中找不到相应的配置项,则到System的Properties中查找,我们还可以选择不检查System的Properties或者覆盖它。

本文摘抄自《Spring 揭秘》。

转载于:https://www.cnblogs.com/minisculestep/p/5043531.html

Spring PropertyPlaceholderConfigurer相关推荐

  1. Spring PropertyPlaceholderConfigurer Usage

    在Spring里有一个PropertyPlaceholderConfigurer类,可以用来处理用一个properties文件里的内容来替换spring配置文件里使用${}的变量定义,比如有时候我们需 ...

  2. Spring PropertyPlaceholderConfigurer Usage - 使用系统变量替换spring配置文件中的变量

    spring 中可以在import 的filename中使用变量 <import resource="camel-context-routes.${username}xml" ...

  3. SSM框架超级详细整合记录:Spring+Spring MVC+MyBatis+Maven+MySQL

    1.前言 本文主要对SSM框架整合的过程进行记录,作为之后参考的依据. 1.1.参考文章 Spring代码实例系列-绪论 Spring MVC代码实例系列-绪论 MyBatis代码实例系列-绪论 1. ...

  4. dhtmlxgrid导出的js_dhtmlxgrid jsp标签

    功能简介 DhtmlxGrid是一个纯Js的控件,能帮你把它约定格式的XML数据,在浏览器端通过Js渲染成表格.该表格具有以下特性: 支持IE6-9.chrome.firefox 丰富的Js API接 ...

  5. ZooKeeper学习笔记—配置管理

    为什么80%的码农都做不了架构师?>>>    最近在工作中,为了完善公司集群服务的架构,提高可用性,降低运维成本,因此开始学习ZooKeeper.     至于什么是ZooKeep ...

  6. 配置持久化框架diamond简介及高阶应用

    配置持久化框架diamond简介及高阶应用 前言 一.简介 二.特点 三.应用场景 四.server搭建 五.发布配置数据 六.简单应用 七.高阶应用 八.spring动态集成diamond 结束语 ...

  7. Spring的PropertyPlaceholderConfigurer事例应用

    在开发的过程中,经常发现一些类似:${log4j.level}之类的内容,后来才知道原因.下面解释一下: 1.PropertyPlaceholderConfigurer是个bean工厂后置处理器的实现 ...

  8. Spring的两种容器后处理器(PropertyPlaceholderConfigurer和PropertyOverrideConfigurer)

    一.容器后处理器 Spring有如下几个常用容器后处理器: PropertyPlaceholderConfigurer:属性点位符配置器 PropertyOverrideConfigurer:重写占位 ...

  9. spring源码分析,聊聊PropertyPlaceholderConfigurer

    2019独角兽企业重金招聘Python工程师标准>>> 简介 最近工作中需要使用zookeeper配置中心管理各系统的配置,也就是需要在项目启动时,加载zookeeper中节点的子节 ...

最新文章

  1. 人脸识别算法初次了解
  2. 美团技术四面经历,作者已拿到Offer!
  3. 基于gulp的前端脚手架(二)
  4. linux 分布式 程序管理,linux--------------git分布式系统项目管理(1)
  5. pythonint切片_python-切片
  6. 安卓手机反应越来越慢怎么办_安卓手机运行慢怎么办 只需几步轻松提升安卓手机速度...
  7. Node — 第七天 (大事件项目接口实现一)
  8. pov-inc_yourself劳自己-懒惰的设计师的POV和一些Figma
  9. 解锁树莓派root账号
  10. Oracle Partition By 的使用
  11. html pt兼容,FCKEditor,一个HTML可视化编辑器,兼容很好
  12. Word文档标题自动增加序号
  13. 交易就是一路风雨兼程 一路披荆斩棘 谋士社区 老锅
  14. Pyqt5的QGraphicsView的使用-选择图片,显示在GUI中
  15. 解决windows防火墙拦截FTP连接
  16. RabbitMQ 入门到应用 ( 六 ) 消息可靠性
  17. 8个最受欢迎的移动跨平台开发引擎
  18. unity农场游戏Farm Business Version 2
  19. 《联想本有更好的路走》《杨元庆会不会掉队》《少帅杨元庆》
  20. 微博上的幂律,为何微信避开了,抖音呢?

热门文章

  1. 分布式定时任务调度系统技术选型
  2. 网络常见的 9 大命令,非常实用!
  3. 图解最常用的10个机器学习算法!
  4. DCIC共享单车数据可视化教程!
  5. 2020 年度最佳的23个机器学习项目!(附源代码)
  6. 装上螺旋桨,加州理工让只能行走的双足机器人「上了天」,还玩起了障碍滑板、走绳索...
  7. 沈向洋博士:三十年科研路,我踩过的那些坑
  8. 他们为什么选择中科大少年班?官方公布48名新生名单,有人因偶像曹原,有人只是不想经历高三...
  9. 中文版Python入门学习的三件法宝!最后一天开放免费下载
  10. 他24岁,4篇Nature在手,也会关心学不懂C语言怎么办