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标签的原理解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Loader用法
- 下一篇: zabbix3.2+Grafana4.0