2019独角兽企业重金招聘Python工程师标准>>>

在spring配置文件中,我们经常见到context:property-placeholder/context:component-scan/ 等常用但比较特殊的标签。有时候我们会有疑问,这些标签是如何被定义的,又是如何被解析的。下面我会通过跟踪spring源码的方式,分析其中的原理。由于本人时间有限,本文不是一次性完成,会随着我的学习进度更新,本文也作为我个人学习笔记使用。(本文是以spring4.1.3版本为例) ####1.占位符

<context:property-placeholder/>

1)用法

最常用的用法就是作为加载数据库连接配置文件(如:db.properties)的占位符。

<!-- 加载配置文件 -->
<context:property-placeholder location="classpath:resource/*.properties" />
<!-- 数据库连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"destroy-method="close"><property name="url" value="${jdbc.url}" /><property name="username" value="${jdbc.username}" /><property name="password" value="${jdbc.password}" /><property name="driverClassName" value="${jdbc.driver}" /><property name="maxActive" value="10" /><property name="minIdle" value="5" />
</bean>

2)原理解析

第一步:我们先找到spring定义property-placeholder元素的XSD文档。因为是context标签命名空间所以该元素定义肯定实在spring的context包中。如下图:

在此文档中我找到了property-placeholder标签的定义 (为了简洁,下面代码去掉了大部分注释

<xsd:element name="property-placeholder"><xsd:annotation><xsd:documentation><![CDATA[Activates replacement of ${...} placeholders by registering a...]]></xsd:documentation><xsd:appinfo><tool:annotation><tool:exports type="org.springframework.context.support.PropertySourcesPlaceholderConfigurer"/></tool:annotation></xsd:appinfo></xsd:annotation><xsd:complexType><xsd:complexContent><xsd:extension base="propertyPlaceholder"><xsd:attribute name="system-properties-mode" default="ENVIRONMENT"><xsd:annotation><xsd:documentation><![CDATA[Controls how to resolve placeholders against...]]>                             </xsd:documentation></xsd:annotation><xsd:simpleType><xsd:restriction base="xsd:string"><xsd:enumeration value="ENVIRONMENT"/><xsd:enumeration value="NEVER"/><xsd:enumeration value="FALLBACK"/><xsd:enumeration value="OVERRIDE"/></xsd:restriction></xsd:simpleType></xsd:attribute></xsd:extension></xsd:complexContent></xsd:complexType></xsd:element>

第二部:由上面XSD文件中可以看出properties文件最终都被封装成了org.springframework.context.support.PropertySourcesPlaceholderConfigurer返回。 下面我从ClassPathXmlApplicationContext类入手跟踪,跟踪到如下调用栈。

转载于:https://my.oschina.net/mlh3823/blog/825033

spring配置文件中非bean标签的原理解析相关推荐

  1. Spring配置文件中bean标签的scope属性

    转自:https://fj-sh-chz.iteye.com/blog/1775149 singleton  (默认属性) Spring将Bean放入Spring IOC容器的缓存池中,并将Bean引 ...

  2. 通过Spring配置文件中bean中的property赋值

    基本数据类型赋值-通过spring配置文件中bean中的property 扩展-以此方式可以通过配置为连接数据的属性赋值 1.如果是基本数据类型,可以通过setter方法为对象中的属性设置初始值,应用 ...

  3. spring security http.rememberMe()使用和原理解析

    spring security http.rememberMe()使用和原理解析 文章目录 spring security http.rememberMe()使用和原理解析 转载请贴上本文链接 htt ...

  4. Spring中的bean标签详解

    文章目录 Bean标签基本配置 Bean标签范围配置 Bean生命周期配置 Bean的依赖注入入门 Bean的依赖注入概念 Bean的依赖注入方式 Bean的依赖注入的数据类型 引入其他配置文件(分模 ...

  5. 从0开始构建你的api网关--Spring Cloud Gateway网关实战及原理解析

    API 网关 API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题 ...

  6. 基于Spring可扩展Schema提供自定义配置支持(spring配置文件中 配置标签支持)

    2019独角兽企业重金招聘Python工程师标准>>> spring使用了这么长时间, 你真的了解spring bean加载的机制吗? 这个是我们项目中最常见的配置文件中的内容配置, ...

  7. spring配置文件中Bean中的id和name的区别

    1.id属性命名必须满足XML的命名规范,因为id其实是XML中就做了限定的.总结起来就相当于一个Java变量的命名:不能以数字,符号打头,不能有空格,如123,?ad,"ab   &quo ...

  8. Spring mvc 内置编码过滤器原理解析

    在Spring mvc框架中是如何解决从页面传来的字符串的编码问题的呢? 下面我们来看看Spring框架给我们提供过滤器CharacterEncodingFilter. web.xml 中 添加如下配 ...

  9. spring大文件分块上传原理解析2

    这两天关于大文件上传这个问题搞得很是头疼,昨天下班回去调研了下,对于不同大小的文件对应有几种解决办法: l   500M以下的用http协议传输(网上一搜大把的),比如Flash,Plupload,W ...

最新文章

  1. 系统讲解——更好的实施专案(Porject)
  2. 解决Ubuntu,su: 认证失败
  3. MySQL——统计某个表每天的总量和增量问题解决方案
  4. 考研计算机组成原理难点,2010计算机考研:计算机组成原理冲刺重难点梳理
  5. Nginx安装手册(摘自入云龙老师教案,亲测可用)
  6. java web 润乾报表教程_润乾报表开发 基础教程.ppt
  7. python编程入门第3版pdf-Python编程入门(第3版) PDF扫描版[26MB]
  8. DRP:分销链上的精灵(转)
  9. 仿支付宝头像外加一个边框的工具类
  10. chmod 777的含义
  11. unicloud云开发---uniapp云开发(四)---本机手机号一键登录以及第三方登陆
  12. Mysql日期的加减法_mysql日期加减
  13. AutoSAR系列讲解(入门篇)6.1-Vector的工具链简介
  14. 基于Qt的房贷计算器
  15. 【covid-19】Inf-Net: Automatic COVID-19 Lung InfectionSegmentation from CT Images
  16. 用手机蓝牙锁定计算机,拿起手机就能自动锁定电脑 这个技巧能保护你的隐私...
  17. Java 中 Pair 类的五种替代方案
  18. 3D人物建模好学吗?需要怎样的美术基础?
  19. 106网盘云储存介绍
  20. 分享大骆驼RK3288B开源硬件光盘资料下载链接

热门文章

  1. UA MATH636 信息论6 微分熵
  2. 数组名与数组指针的关系
  3. 初步的看一下C#窗体程序的直接反汇编代码
  4. Matlab符号运算 - 解微分方程
  5. PE文件到内存的映射学习总结
  6. 干货 | 国内互联网公司是如何做微服务实践的?(附PPT下载)
  7. 51单片机学习笔记(清翔版)(21)——ADDA数模转换
  8. nodejs中的路径和url操作
  9. vue中textarea标签自适应高度
  10. pycharm的安装和使用