首页 > 代码库 > Webx框架:Spring Schema 和 Spring Ext

Webx框架:Spring Schema 和 Spring Ext

webx诞生的原因是当时市面上没有好用的web框架。现在的Web框架有很多,然后它们背后的思想都是相似的,而且越来越趋同。


Spring Schema

在传统的spring中,配置bean时需要手动去指定具体的实现类是什么,参数有哪些。这样开发者需要记住具体的实现类、参数名称、含义等,会带来很大的记忆负担。为了解决这个问题,SpringSchema出现了。它的解决办法是将所有的参数转换成标签。标签是可以通过XML Schema定义的。这样只需要记忆标签的名字即可。标签的名称一般都很短,因此减轻了开发者的负担。


在传统的Spring中,可能一个组件需要像下面这样配置。它使用了property、map、entry等标签,这些标签都不是重点,重点在于name、key、value-ref这些属性。

<bean id="resourceLoadingService" class="com.alibaba...ResourceLoadingServiceImpl">
  <property name="mappings">
    <map>
      <entry key="/file" value-ref="fileLoader" />
      <entry key="/webroot" value-ref="webappLoader" />
    </map>
  </property>
</bean>


为了解决这个问题。SprintExt引入了Spring Schema。组件的配置就成了下面这样。标签的名称都是重点。还有一个好处就是,标签的格式可以在XML Schema中定义,能使IDE更加智能。

<resource-loading id="resourceLoadingService"
xmlns="http://www.alibaba.com/schema/services/resource-loading">
  <resource pattern="/file">
    <file-loader basedir="${user.home}" />
  </resource>
  <resource pattern="/webroot">
    <webapp-loader />
  </resource>
</resource-loading>


SpringExt

SpringExt扩展了Spring Schema,它能让XML文件提供更多的扩展性。


SpringExt中有几个重要的概念:

  • 扩展点:相当于标签的命名空间。
  • 捐献:相当于命名空间的具体实现。
  • 组件:组件可以被别的模块扩展,也可以扩展别的模块。比如ResourceLoadingService就是一个组件,这个在后面还会有介绍。


Webx容器。它完全兼容Spring的容器,因此语法和Spring完全一样。Webx框架在启动时自动加载WEB-INF/webx.xml和WEB-INF/webx-*.xml文件。其中webx-*.xml是子容器,它们都继承了webx.xml。


日志。日志的配置需要在web.xml中加入一个listener:

<listener>
  <listener-class>com.alibaba.citrus.logconfig.LogConfiguratorListener</listener-class>
</listener>


页面驱动。在传统的开发流程中,视觉设计师设计出模板之后无法直接看到效果,需要等到Action代码编写完成才能看到。而页面驱动的理念中,视觉设计师在做完页面之后可以直接看到效果,而且可以在页面中直接使用框架提供的一些工具,比如页面跳转,验证登陆等。webx框架还提供了一系列工具,名为pull tools,它可以在页面中被调用,而且可以按需加载。比如表单的工具就是一种 Pull tools,可以用表单工具判断一个字段是否正确,错误消息是什么。


规则映射。在webx中,URL首先解析成Target,Target再由Pipeline进行解析。Pipeline解析可以得到模板名。模板名可以是Layout,可以是Module。一个Layout中可以包含Control和Screen。Control可以有多个,Screen只能有一个。Control相当于页面中的一个控件。

Webx框架:Spring Schema 和 Spring Ext