`
downpour
  • 浏览: 717428 次
  • 性别: Icon_minigender_1
  • 来自: 上海
博客专栏
00a07ae5-264f-3774-8903-8ad88ce08cb0
Struts2技术内幕
浏览量:117930
4d8508f2-c0dd-3df8-9483-04cc612afbbc
SpringMVC深度探险...
浏览量:230641
社区版块
存档分类
最新评论

忘记李刚,一步一步跟我学Struts2 —— 配置,灵活还是简单?

阅读更多
几乎所有的开源框架都有配置。配置之所以能够作为一个很重要的内容成为开源框架的一部分,可能基于以下的原因:

1. 配置是避免硬编码的有效途径

通过配置,我们可以非常轻松的替换某些运行参数、替换接口的实现类等,从而达到使程序更加灵活的目的。在这里,最典型的例子就是基于XML的Spring的配置文件。由于Spring提倡的面向接口的编程,使得你可以通过配置来灵活地替换内部实现,从而可以轻而易举地改变程序的运行特性。

2. 配置必须被用于指定某些映射关系

这一点其实大家也深有体会。以Hibernate为例,ORM的映射关系最早就是通过XML配置文件来指定的。而许多传统的Web层框架,更加通过XML配置文件,来指定URL与Control层的Java类的映射关系。

3. 配置能提供系统运行必须的参数

这一点与第一点非常类似,只是目的迥异。第一点的目的在于偷懒,在于保持足够的灵活性。而这里,我们可能不得不将一些系统化的参数进行固化处理,从而用到了配置文件。


有关配置的讨论

基于上面所提到的三点的原因,配置文件被认为是架起外界与程序之间的桥梁、是反应框架内部功能的一面镜子、更是程序是否灵活的一个重要标准,同时,其也成为了程序员学习框架时必须迈过的一道坎。说它是一道坎,一点也不过分,因为随着时代的发展,程序员们已经越来越开始报怨配置文件的庞大和无序,报怨过多的重复的配置劳动力成本,报怨配置本身的学习成本。

于是,一场试图改变当前生活状态的大讨论轰轰烈烈的开始。我从Javaeye上摘录了几篇有价值的讨论,分别站在不同的角度,对配置这一问题进行了剖析:

1. 从配置文件的归类和使用方式上入手

[downpour] 若干条J2EE应用中运用“配置”的最佳实践:http://www.iteye.com/topic/185542

2. 有关配置的表现形式的讨论

[ahuaxuan] xml和annotation的是是非非:http://www.iteye.com/topic/178725

[Readonly] 如何才算滥用annotation?:http://www.iteye.com/topic/16062

3. 试图通过改进框架,来加强或简化配置

[cnoss] 让你的 Ibatis2 也支持Annotation:http://www.iteye.com/topic/251047

[downpour] LightURL——打造零配置的Struts2开发方式:http://www.iteye.com/topic/242838

配置的现状和趋势

随着时代的发展,人们对配置的要求越来越高,这些高要求体现在:不丧失程序的灵活性,但是要保持尽量简单。于是,有关配置的现状和趋势,就体现为:表现形式的多样化和命名约定的广泛使用性。

表现形式的多样性,就要求我们能够根据实际情况在配置的不同表现形式中做出选择。在ahuaxuan的《xml和annotation的是是非非》中,讨论了如何在xml和annotation中做出合理的选择:

ahuaxuan 写道

于是我们看到我的项目里到处都是xml配置文件,从struts,到 hibernate,而且尤其是struts和hibernate,一个中型项目,struts的xml配置文件有时候达到数万行,再大一点的,可以数十万行,虽然很多时候都是拷贝,粘贴,但是看这个这个数十个几千行的struts配置文件能不让人倒胃口吗。再说那个hbm.xml,大家再熟悉不过了,你想想吧,一个几域模型的项目里,你需要有多少配置文件,我眼睛都看花了。这些都是xml的缺点。


Readonly 写道
ahuaxuan 写道

Model一个field上挂了O/R Mapping, Full Text Index, Validation, Security...如果这么多配置不放在annotation中还是需要放在配置文件中,那么一个model就需要很多配置文件了

偶的意见就是要分开多个配置文件,减少Line Of Code per File,减少维护成本,降低出错概率,分离关注点。


而在这里,我也再次重申一下我的观点:

downpour 写道
我现在的原则是,能不用Annotation的地方尽量不用,能不用XML的地方尽量不用。两者皆可时,看哪个需要敲的字母少,扩展性更强。

某个Annotation受到欢迎的程度我觉得取决于两点,一个是Annotation是否足够简单,例如像Spring2.5中的@Service,@Autowired。另外一个,就是如果有相应的XML配置,是否能完成“弱智”过度。我这里所说的弱智过度其实就是指Annotation中的语义是否能够和XML中的属性语义保持一致,以至于那些原本从XML过度到Annotation的朋友可以很容易的就切换过来。这一点,Struts2的Annotation就做得比较好,但是Hibernate的Annotation就很不容易让人产生联想。

事实上,我个人很反对在一个Domain Model上加Annotation来完成类似持久化、搜索等语义。就像Readonly说的,一个Domain Model就是一个Domain Model,很多情况下,我需要在其中填充一些业务逻辑,或者甚至我只想看看有那些字段。加上了过多的Annotation,导致这个文件臃肿不堪,也搞不清楚它到底承担了多少责任。甚至还要因为某些Annotation增加很多不必要的工作量。比如,没事情在Domain Model里面加了一个额外的getter方法为了前台显示用,结果为了Hibernate还要搞个恶心的@Transit的annotaion。实在是不能让人接受。。


当然,这是一个仁者见仁智者见智的问题,希望大家可以从讨论中多多思考,获取自己的观点。

至于说到命名约定,RoR已经在这个方面为我们做出了强烈的表率作用。而从Spring开始提倡使用@Autowired的Annotation,到Struts2的零配置插件的不断涌现,也正体现了配置正在越来越往这个方向靠。大家也可以在学习的过程中,多多注意命名约定在项目中的使用,从中学到几招最佳实践。

Struts2中的配置

Struts2作为一个传统的MVC框架,同样有很多基础配置。包括它的前身Webwork2在内,最早也是完全使用XML作为全程的配置语义的。

从配置文件的管理和配置结构上来讲,Struts2优于之前的许多Web层框架。这一点moxie曾经写过一篇文章介绍过:

[moxie] WebWork2多模块解决方法:http://www.iteye.com/topic/6529

从XML的语义设计来看,Struts2和Webwork2比起他们的先辈来说,也有明显的进步,不会在出现Struts1中,name居然表示actionForm这样让人匪夷所思的语义了。

从功能上来说,Struts2的配置文件不仅提供了URL到Control层的映射关系的定义,同时也成为了一个简单的容器定义的场所。所以,事实上Struts2包含了双重的功能。有关容器和IoC方面的内容,我在后面的章节会详细介绍。

而Struts2在配置简化方面,由于它提供了插件的机制,所以这部分功能往往由插件来完成。有兴趣的读者可以自行参考相关的插件:

codebehind:http://cwiki.apache.org/S2PLUGINS/codebehind-plugin.html

smarturls:[url]http://cwiki.apache.org/S2PLUGINS/smarturls-plugin.html [/url]

lighturl:http://www.iteye.com/topic/242838

最后一个插件是我写的,在这里做个小小的广告,大家可以尝试着用用看,并提出宝贵意见。

在接下来的章节中,我会重点介绍Struts2中有关配置的详细内容、包括源码分析、简化配置的扩展点、自行编写插件来简化配置等等。

分享到:
评论

相关推荐

    struts2 权威指南pdf+源代码

    《Struts2权威指南》是由著名Java技术专家李刚编著的一本经典教材,这本书深入浅出地讲解了Struts2的核心概念、架构和使用方法。书中不仅涵盖了Struts2的基础知识,还详细讨论了如何将Struts2与其他流行技术如Spring...

    轻量级Java EE企业应用开发实战—光盘——Struts 2+Spring+Hibernate整合开发

    在这个实战教程中,作者李刚聚焦于Struts 2、Spring和Hibernate这三个核心组件的整合,它们是Java EE领域中非常流行的开源框架,用于构建现代化的Web应用程序。 Struts 2是一个强大的MVC(模型-视图-控制器)框架,...

    Struts 2.1权威指南:基于WebWork核心的MVC开发

    李刚的Struts 2.1权威指南:基于WebWork核心的MVC开发,写的很详细。一共有九个压缩文件。

    struts2权威指南源代码

    《Struts2权威指南》是李刚先生撰写的一本深入解析Struts2框架的专业书籍,其源代码的提供对于读者理解和实践Struts2框架具有极大的帮助。 源代码通常包含了书中讲解的各种示例和实战项目,使得学习者能够通过实际...

    Struts2.1权威指南——基于WebWork核心的MVC开发.pdf

    - **第2章Struts2下的HelloWorld**:通过一个简单的示例展示如何搭建Struts2环境并运行第一个程序。 - **第3章Struts2基础**:涵盖Struts2的核心组件、配置文件、请求处理流程等基础知识。 - **第4章深入Struts2**:...

    亲测Struts2 3.4.1必需包

    在这个亲测Struts2 3.4.1必需包中,我们可以找到李刚系列书中推荐使用的JAR包,这些库文件对于成功运行和开发基于Struts2 3.4.1的应用至关重要。 1. **Struts2核心组件**:Struts2的核心库包含了处理请求、响应、...

    struts2学习教程,教案

    本教程将引导你逐步了解和掌握Struts2的基础知识,结合李刚老师的《轻量级JAVA EE 企业应用开发实践》教材,帮助你深入理解Struts2的核心概念和使用方法。 在Web开发中,MVC模式是一种常见的架构模式,它将应用程序...

    轻量级java ee企业应用实战(第3版)—struts2+spring3+hibernate3.6整合开发

    学习JEEE的经典教材,由李刚老师编著,这是最新的第三版,第3版保持了第2版内容全面、深入的特点,主要完成全部知识的升级。该书在2011年2月由电子工业出版社出版 由于上传文件大小限制本书被压缩为四个部分,此附件...

    Struts2权威指南完整版(上).pdf

    李刚老师编著的,Struts2权威指南完整版(上).pdf。可以帮助初学者入门,帮助入门者提高。

    Struts2权威指南

    李刚老师的《Struts2权威指南》是一本深入探讨这个框架的著作,旨在帮助读者全面理解和掌握Struts2的核心概念、配置以及实际应用。 Struts2的核心概念主要包括Action、Result、Interceptor和ValueStack。Action是...

    struts2权威指南

    《Struts2权威指南》由李刚编著,全面深入地介绍了Struts2框架的各个方面,是学习和掌握Struts2不可或缺的参考资料。 在Struts2框架中,主要涉及以下核心知识点: 1. **基础概念**:Struts2是Struts1的升级版,...

    Struts2权威指南完整版pdf

    李刚编著的《Struts2权威指南》是一本深入剖析该框架的书籍,它以丰富的实例和详尽的参数解析,帮助开发者从基础到高级全面掌握Struts2的使用。 1. **Struts2框架概述** - Struts2是Apache软件基金会下的一个开源...

    struts2 权威指南 源码

    《Struts2权威指南》是李刚先生撰写的一本深入解析Struts2框架的专业书籍,其源码的提供对于学习和理解Struts2的工作原理非常有帮助。 源码分析: 1. **Action与结果类型**:在Struts2中,Action是业务逻辑的载体...

    struts2权威指南.rar

    2. **配置灵活性**:Struts2允许通过XML或者注解进行配置,使得开发者可以根据项目需求灵活选择配置方式。 3. **插件架构**:Struts2拥有丰富的插件系统,如Tiles插件用于页面布局,Freemarker或Velocity插件用于...

    Struts2权威指南完整版

    《Struts2权威指南》是李刚所著的一本详细解析Struts2框架的书籍,其完整版涵盖了Struts2的核心概念、配置、实践应用以及与其他流行技术如Spring、JSF、Hibernate的整合。 首先,让我们深入理解Struts2的基础知识。...

    《轻量级java ee企业应用实战 第3版 struts 2+spring 3+hibernate整合开发》 PDF

    《轻量级Java EE企业应用实战 第3版》是一本深度探讨Java EE开发技术的书籍,专注于Struts 2、Spring 3和Hibernate这三大框架的整合应用。这本书旨在帮助开发者掌握如何在实际项目中有效地集成这三个流行的技术,...

    Struts2权威指南源代码

    《Struts2权威指南》是李刚编著的一本深入讲解Struts2框架的书籍,包含了全面的理论知识和实践案例。 在提供的源代码中,我们可以看到以下几个文件和目录: 1. **目录.txt**:这本书的完整章节目录,它将帮助读者...

Global site tag (gtag.js) - Google Analytics