webx3的扩展点

以Template渲染服务为例子

<!-- Template渲染服务。 -->
<services:template xmlns="http://www.alibaba.com/schema/services/template/engines"
searchExtensions="true">
<velocity-engine templateEncoding="GBK" strictReference="false"
path="/templates/${component}">
<global-macros>
<name>global/*.vm</name>
</global-macros>
<plugins>
<vm-plugins:escape-support defaultEscape="html">
<vm-plugins:noescape>
<vm-plugins:if-matches pattern="^control\." />
<vm-plugins:if-matches pattern="^screen_placeholder" />
<vm-plugins:if-matches pattern="^stringEscapeUtil\.escape" />
<vm-plugins:if-matches pattern="^csrfToken\.(get)?hiddenField" />
</vm-plugins:noescape>
</vm-plugins:escape-support>
</plugins>
</velocity-engine>
</services:template>


services是root扩展点,template是对services的捐献,同时template的element也是扩展点,namespace:http://www.alibaba.com/schema/services/template/engines,详见template.xsd:


<xsd:complexType name="TemplateServiceType">
<xsd:choice minOccurs="0" maxOccurs="unbounded">
<xsd:element name="template-mapping" type="TemplateServiceEngineMappingType"
minOccurs="0" maxOccurs="unbounded">
<xsd:annotation>
<xsd:documentation><![CDATA[
将模板引擎和模板名后缀关联起来。
]]></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:any namespace="http://www.alibaba.com/schema/services/template/engines" />
</xsd:choice>
<xsd:attribute name="defaultExtension" type="xsd:string" />
<xsd:attribute name="searchExtensions" type="springext:booleanOrPlaceholder" />
<xsd:attribute name="searchLocalizedTemplates" type="springext:booleanOrPlaceholder" />
<xsd:attribute name="cacheEnabled" type="springext:booleanOrPlaceholder" />
<xsd:attributeGroup ref="springext:identifiedTypeAttributeSubset" />
</xsd:complexType>

<xsd:complexType name="TemplateServiceEngineMappingType">
<xsd:attribute name="extension" type="xsd:string" use="required" />
<xsd:attribute name="engine" type="xsd:string" use="required" />
</xsd:complexType>



template的属性:searchExtensions等。
template的elements:global-macros, plugins。
global-macros是一个list sting
plugins又是一个扩展点.vm-plugins是其中的一种捐献。

对应的xsd描述:

<xsd:complexType name="VelocityTemplateEngineType">
<xsd:complexContent>
<xsd:extension base="beans:identifiedType">
<xsd:all>
<xsd:element name="global-macros" type="VelocityGlobalMacrosType" minOccurs="0">
<xsd:annotation>
<xsd:documentation><![CDATA[
装载全局宏(相对于path路径),可使用通配符。
]]></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="plugins" type="VelocityPluginsType" minOccurs="0">
<xsd:annotation>
<xsd:documentation><![CDATA[
Velocity插件和事件处理器。
]]></xsd:documentation>
</xsd:annotation>
</xsd:element>
<xsd:element name="advanced-properties" type="VelocityPropertiesType"
minOccurs="0">
<xsd:annotation>
<xsd:documentation><![CDATA[
Velocity高级设置,参见velocity文档:
(http://velocity.apache.org/engine/releases/velocity-1.6.2/developer-guide.html#Velocity_Configuration_Keys_and_Values)
和默认配置文件:org/apache/velocity/runtime/defaults/velocity.properties。
]]></xsd:documentation>
</xsd:annotation>
</xsd:element>
</xsd:all>
<xsd:attribute name="path" type="xsd:string" default="/templates" />
<xsd:attribute name="templateEncoding" type="xsd:string" default="UTF-8" />
<xsd:attribute name="cacheEnabled" type="springext:booleanOrPlaceholder"
default="true" />
<xsd:attribute name="modificationCheckInterval"
type="springext:integerOrPlaceholder" default="2" />
<xsd:attribute name="strictReference" type="springext:booleanOrPlaceholder"
default="true" />
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>



其中的

<xsd:element name="global-macros" type="VelocityGlobalMacrosType" minOccurs="0">
<xsd:element name="plugins" type="VelocityPluginsType" minOccurs="0">

定义了element的名字和类型的映射关系,下面是type的描述:

<xsd:complexType name="VelocityGlobalMacrosType">
<xsd:sequence>
<xsd:element name="name" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>

<xsd:complexType name="VelocityPluginsType">
<xsd:sequence>
<xsd:any
namespace="http://www.alibaba.com/schema/services/template/engines/velocity/plugins"
minOccurs="0" maxOccurs="unbounded" />
</xsd:sequence>
</xsd:complexType>

xsd:sequence表示list,xsd:any表示所有满足namespace="http://www.alibaba.com/schema/services/template/engines/velocity/plugins"都行。其实就是定义了一处扩展点。

二.VelocityEngineDefinitionParser类
再来看看VelocityEngineDefinitionParser如何来parser。
VelocityEngineDefinitionParser 继承了 AbstractSingleBeanDefinitionParser,但是要注意如果是顶级service要继承AbstractNamedBeanDefinitionParser,实现其getDefaultName方法。否则会抛出异常。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值