用插件定制扩展
一个框架必须提供一种容易的创建定制扩展的方式,允许一种插件机制,把外部服务无缝的插入到框架中。要实现这个,框架必须提供扩展点,让一个可插入的组件可以进行生命周期管理(比如init和destroy)。通过提供这样的扩展点,一个开发人员能够写一个服务,该服务能够根据扩展机制确保接口支持,这种插件接口用来控制服务和相关框架资源的创建,使用,清除。
struts校验就是一个插件例子,它是声明式校验变成可能。struts-config.xml的相应条目描述如下:
value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml"/>
ValidatorPlugIn类和其它所有插件类有控制器初始化时实例化。每个插件对象使用的className属性实例化。这个插件对象遵循JavaBeans规范的设计模式,对于每个定义在元素的属性都提供了属性处理方法。一旦一个插件实例化,它的init方法被调用,以让开发人员完成插件自己的实例化操作。比如,ValidatorPlugIn.init方法会初始化它的资源并使用ValidatorPlugIn.VALIDATOR_KEY保存资源到上下文中;这些资源将在创建框架的上下文中的org.apache.commons.validator.Validator类的实例时使用。控制器初始化的插件用Action.PLUG_INS_KEY关键字,把org.apache.struts.action.PlugIn对象的数组保存在上下文中,接着使用控制器的destroy方法调用每个插件的destroy方法释放请求的资源。
摘要
实现基于http协议的请求/相应的MVC模式所花费的时间和努力会是有利可图的。选择一个合适的框架解决这个问题会提供一个领先的开始,它会允许架构师和开发人员更多的关注业务而不是集成。struts也提供了完整的模块比如validator实现表单的声明式校验,Tiles组织复合视图;这些模块加强了框架的功能,极大的简化了设计和开发应用程序的任务。更多关于struts,安装配置信息可以在http://jakarta.apache.org/struts/userGuide/index.html找到。因为struts一直在修改,可能在你读到本文章的时候,一些实现可能发生改变,因此最好通过http://jakarta.apache.org/struts发布的文档和更新声明完成这些内容
参考
[Core] Core J2EE Patterns by Deepak Alur et. al. (Prentice Hall, 2001)
[Gof] Design Patterns by Erich Gamma et. al. (Addison-Wesley, 1995)