spring配置文件中非bean标签的原理解析
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标签的原理解析相关推荐
- Spring配置文件中bean标签的scope属性
转自:https://fj-sh-chz.iteye.com/blog/1775149 singleton (默认属性) Spring将Bean放入Spring IOC容器的缓存池中,并将Bean引 ...
- 通过Spring配置文件中bean中的property赋值
基本数据类型赋值-通过spring配置文件中bean中的property 扩展-以此方式可以通过配置为连接数据的属性赋值 1.如果是基本数据类型,可以通过setter方法为对象中的属性设置初始值,应用 ...
- spring security http.rememberMe()使用和原理解析
spring security http.rememberMe()使用和原理解析 文章目录 spring security http.rememberMe()使用和原理解析 转载请贴上本文链接 htt ...
- Spring中的bean标签详解
文章目录 Bean标签基本配置 Bean标签范围配置 Bean生命周期配置 Bean的依赖注入入门 Bean的依赖注入概念 Bean的依赖注入方式 Bean的依赖注入的数据类型 引入其他配置文件(分模 ...
- 从0开始构建你的api网关--Spring Cloud Gateway网关实战及原理解析
API 网关 API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题 ...
- 基于Spring可扩展Schema提供自定义配置支持(spring配置文件中 配置标签支持)
2019独角兽企业重金招聘Python工程师标准>>> spring使用了这么长时间, 你真的了解spring bean加载的机制吗? 这个是我们项目中最常见的配置文件中的内容配置, ...
- spring配置文件中Bean中的id和name的区别
1.id属性命名必须满足XML的命名规范,因为id其实是XML中就做了限定的.总结起来就相当于一个Java变量的命名:不能以数字,符号打头,不能有空格,如123,?ad,"ab &quo ...
- Spring mvc 内置编码过滤器原理解析
在Spring mvc框架中是如何解决从页面传来的字符串的编码问题的呢? 下面我们来看看Spring框架给我们提供过滤器CharacterEncodingFilter. web.xml 中 添加如下配 ...
- spring大文件分块上传原理解析2
这两天关于大文件上传这个问题搞得很是头疼,昨天下班回去调研了下,对于不同大小的文件对应有几种解决办法: l 500M以下的用http协议传输(网上一搜大把的),比如Flash,Plupload,W ...
最新文章
- 系统讲解——更好的实施专案(Porject)
- 解决Ubuntu,su: 认证失败
- MySQL——统计某个表每天的总量和增量问题解决方案
- 考研计算机组成原理难点,2010计算机考研:计算机组成原理冲刺重难点梳理
- Nginx安装手册(摘自入云龙老师教案,亲测可用)
- java web 润乾报表教程_润乾报表开发 基础教程.ppt
- python编程入门第3版pdf-Python编程入门(第3版) PDF扫描版[26MB]
- DRP:分销链上的精灵(转)
- 仿支付宝头像外加一个边框的工具类
- chmod 777的含义
- unicloud云开发---uniapp云开发(四)---本机手机号一键登录以及第三方登陆
- Mysql日期的加减法_mysql日期加减
- AutoSAR系列讲解(入门篇)6.1-Vector的工具链简介
- 基于Qt的房贷计算器
- 【covid-19】Inf-Net: Automatic COVID-19 Lung InfectionSegmentation from CT Images
- 用手机蓝牙锁定计算机,拿起手机就能自动锁定电脑 这个技巧能保护你的隐私...
- Java 中 Pair 类的五种替代方案
- 3D人物建模好学吗?需要怎样的美术基础?
- 106网盘云储存介绍
- 分享大骆驼RK3288B开源硬件光盘资料下载链接