Webx SpringExt

[SpringExt 基于Spring,提供扩展组件的能力]

WebX框架中基础服务基于Spring Ext以service bean的形式提供。


(一) 常见的spring bean配置方式

1)通过<beans><bean><property>方式的Spring bean配置方式

这种方案简单易行,很好地体现了Spring的基础理念:IoC(Inversion of Control,依赖反转)

Spring的配置文件会依赖于服务实现类的公开API。装配者除非查看源代码,或者API文档才能精确地获知这些API的细节。

基于Spring IoC容器的业务bean可以这样使用,

但是如果基于Spring IoC容器开发框架组件的话,这样框架使用者为了使用某个组件的功能,可能还要关心组件的部分实现。这样肯定不好啦!!!


 2)SpringSchema配置

服务的实现细节对装配者隐藏。

所有的schema都会有一个“解释器”和它对应(即BeanDefinitionParser)。

这个解释器负责将符合schema定义的XML配置,转换成Spring能解读的beans定义。解释器是由服务的开发者来提供的

 

------------------------------------------------------------------------------------

(二)  SpringExt关键概念

1)      扩展点 Configuration Point

对应一个唯一的namespace:

http://www.alibaba.com/schema/services/resource-loading/loaders

对应一个唯一的schema:

services-resource-loading-loaders.xsd

<xsd:any>定义只关心namespace,不关心element的名称,自然可以接受未知的<database-loader>element,前提是<database-loader>的namespace是“http://www.alibaba.com/schema/services/resource-loading/loaders”。

2)      捐献 Contriubtion:对应一个xml中的标签

SpringExt把每一个对扩展点的具体扩展称作“捐献,Contriubtion”

Contribution将element和对 ResourceLoader接口的具体实现 关联起来。

 对应一个唯一的schema


3) 总结

Xml和schema文件中

扩展点往往对应于一个namespace;

捐献者对应扩展点namespace的不同Schema中定义的element。

Java代码中

扩展点往往对应于一个接口;捐献者往往对应于这个接口的一个具体实现。

 


------------------------------------------------------------------------------------

(三)SpringExt 的实现原理——基于SpringSchema配置

1)在可能变化的点,针对接口编程。对应的使用这个接口的组件就是一个可扩展点。

针对这个可扩展点的依赖注入,schema中<xsd:any>定义只关心namespace,不关心element的名称

2)由此针对相同的namespace下的不用element就是这个可扩展点的实现



------------------------------------------------------------------------------------


(四)WebX中Spring Ext的应用

Spring Ext 有一个顶级扩展点“service”;针对这个扩展点的不同捐献即各种服务组件

 

另外,SpringExt针对组件有特别的定义:

在SpringExt中,一个模块既可以成为别的模块的扩展,也可以被别的模块来扩展。这样的模块被称为“组件”。

 

应用Spring Ext分如下几个关键步骤

-----如何定义扩展点

1)  定义扩展点的xsd,其中要明确所有该扩展点的捐献需要的namespace【比如顶级扩展点service】

2)  对应扩展点在java代码中定义好接口

3) 对应有解析类

------基于已有的扩展点,如何定义和使用捐献

1)  定义一个捐献的xsd文件,这里面就是应对变化添加的内容

2)  <Beans>中引用这个xsd文件,并且进行配置即指明扩展点namespace,但是可以有不同的element name。

3)  对应有一个实现解析的类,可以解析element成为一个扩展点接口的实现类

 

这里有一个关键问题是SpringExt在什么位置定位xsd文件?

取得schema内容的途径:

1)  访问schemaLocation所指示的网址

外部服务器

使用SpringExt所提供的maven插件(mvnspringext:run),在localhost本机上启动一个监听8080端口的Schema Server,通过它就可以访问到所有的schema

2)  将所有的schema保存在本地,然后定义一个标准的XML Catalog来访问这些schema文件



-----------------------------------------------------------------------------------

Spring schema配置Bean的方法
设计配置属性和 JavaBean 
编写 XSD文件  
编写 NamespaceHandler BeanDefinitionParser 完成解析工作  
编写 spring.handlers spring.schemas串联起所有部件  
 Bean文件中应用
Spring schema的应用于Webx
概念:扩展点和捐献
——扩展点:
某个bean中的注入会扩展变化,
那么使用schema定义这个bean的配置时,其中property类型通过namespace来定义
[具体实现使用<xsd:any>,其定义只关心namespace,不关心element的名称]
其他的和实现一个bean的spring schema配置一样,比如还要定义解析类等等。
另外扩展点对应在java代码中就是一个接口,即扩展点面向接口编程。
——捐献:
就是一个具体的bean的属性扩展。实现了扩展点接口。
这个bean本身也需要通过spring schema定义,所以定义其xsd,只要保证namespace与扩展点一致即可。
举例
——Webx顶级扩展点是service;
这个意味着:
1)对应这个顶级扩展点,WebX框架定义了一个接口,所有针对这个扩展点的捐献都实现这个接口。
2)存在定义扩展点本身的xsd,通过这个xsd保证了整个扩展机制的可行。
2)所有扩展点的捐献bean,schema bean配置元素都是service的namespace。
——需要向WebX添加功能,即定义该扩展点的捐献
1)定义该捐献的xsd;这样这个捐献可以使用spring schema定义,注意其namespace
2)捐献本事有Java类实现了WebX框架定义的service扩展点接口
3)实现spring shcema配置bean的解析


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值