我们对Java EE的框架有过良多介绍, 本文将对Java EE中常用的四个框架做一下系统的归纳,但愿巨匠喜欢。5 G8 T( H _. o: P
Struts6 O/ f" J5 @' h. C s+ f
Struts是一个基于Sun Java EE平台的MVC框架,主若是采用Servlet和JSP手艺来实现的。5 s; O0 y h& L: X% p [: v8 K
Struts框架可分为以下四个首要部门,其中三个就和MVC模式慎密相关:
( K8 r% y, P T8 v9 x 1、模子 (Model),素质上来耸ё仝Struts中Model是一个Action类(这个会在后面具体谈判),开发者经由过程其实现商业逻辑,同时用户请求经由过程节制器(Controller)向Action的转发过程是基于由struts-config.xml文件描述的设置装备摆设信息的。
* C, a* Y) I! O' `" } 2、视图(View),View是由与节制器Servlet配合工作的一整套JSP定制标签库组成,操作她们我们可以快速成立应用系统的界面。
0 S N' m; Y* s* u) ?3 M 3、节制器(Controller),素质上是一个Servlet,将客户端请求转发到响应的Action类。
s5 ^: O" V8 i& }8 j 4、一堆用来做XML文件解析的工具包,Struts是用XML来描述若何自动发生一些JavaBean的属性的,此外Struts还操作XML来描述在国际化应用中的用户提醒信息的(这样一来就实现了应用系统的多说话撑持)。$ C, M+ t v" x/ s
Spring
4 C5 o" Q# G- y9 M+ d: u6 H! B% ~! p Spring是轻量级的Java EE应用轨范框架。* |) ^) r' `/ o3 i2 _
Spring的焦点是个轻量级容器(container),实现了IoC(Inversion of Control)模式的容器,Spring的方针是实现一个全方位的整合框架,在Spring框架下实现多个子框架的组合,这些子框架之间彼此可以自力,也可以使用其它的框架方案加以替代,Spring但愿供给one-stop shop的框架整合方案 。
% Q4 A8 ^, ?) n- {# S* M3 q2 C0 ~7 W Spring不会特別去提出一些子框架来与现有的OpenSource框架竞争,除非它感受所提出的框架夠新夠好,例如Spring有自己的 MVC框架方案,因为它感受现有的MVC方案有良多可以改良的处所,但它不强迫您使用它供给的方案,您可以选用您所但愿的框架来庖代其子框架,例如您仍可以在Spring中整合您的Struts框架 。
# H. ]6 `3 K/ w( D Spring的焦点概念是IoC,IoC的抽象概念是「依靠关系的转移」,像是「高层模组不应该依靠低层模组,而是模组都必需依靠于抽象」是 IoC的一种默示,「实现必需依靠抽象,而不是抽象依靠实现」也是IoC的一种默示,「应用轨范不应依靠于容器,而是容器处事于应用轨范」也是IoC的一种默示。
! z) y0 s) ]+ f$ N7 @* Y Spring的架构性的益处
6 T7 w# \" `9 {$ l: y7 w1 g* n/ L Spring能有用地组织你的中心层对象,无论你是否选择使用了EJB。如不美观你仅仅使用了Struts或其他的包含了Java EE特有APIs的framework,你会发现Spring关注了遗留下的问题。
* k# I# X7 k' i- g; c. j- a9 G/ \ Spring能消弭在良多工程上对Singleton的过多使用。按照我的经验,这是一个首要的问题,它削减了系统的可测试性和面向对象特征。( V# {0 z- a2 `! D. g$ y
Spring 能消弭使用各类各样名目的属性定制文件的需要,在整个应用和工程中,可经由过程一种一致的体例来进行设置装备摆设。曾经感应迷惑,一个特定类要查找迷幻般的属性关头字或系统属性,为此不得不读Javadoc甚至源编码吗?有了Spring,你可很简单地看到类的JavaBean属性。倒置节制的使用(不才面谈判)辅佐完成这种简化。Spring能经由过程接口而不是类促进好的编程习惯,削减编程价钱到几乎为零。) o" C. H" o- [2 E
Spring被设计为让使用它建树的应用尽可能少的依靠于他的APIs。在Spring应用中的大大都营业对象没有依靠于Spring。
9 h9 N# V/ c" l2 I. o9 Y" r% R8 J 使用Spring构建的应用轨范易于单元测试。" i" y0 j3 h. y8 }! x* ^2 O
Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现营业接口,却不会影响挪用代码。9 o) I i y) Y7 E0 s8 a- Z
Spring辅佐你解决良多问题而无需使用EJB。Spring能供给一种EJB的替代物,它们适于良多web应用。例如,Spring能使用AOP供给声明性事务而不经由过程使用EJB容器,如不美观你仅仅需要与单个的数据库打交道,甚至不需要JTA实现。
& h( i* n1 r6 ^% N: m Spring为数据存取供给了一致的框架,非论是使用JDBC或O/R mapping产物(如Hibernate)。" i8 x8 H8 N% l1 _* U9 \
Spring确实使你能经由过程最简单可行的解决法子解决你的问题。这些特征是有很大价值的。: E! S, P4 g3 b" \- d, u9 j
Spring能做什么?4 V# N) c1 _/ p
Spring供给良多功能,在此我将快速地依次展示其各个首要方面。
0 I5 ~0 @0 a, I 使命描述:
4 U. ^- n1 |' P# ?" }# |' ? 首先,让我们明晰Spring规模。尽管Spring笼盖了良多方面,但我们已经有清嚣张的概念,它什么应该涉及和什么不应该涉及。
( U, q# P% G' S2 J- ^: Z: } Spring的首要目的是使Java EE易用和促进好编程习惯。
+ G; m' j9 J) E9 q8 ~# G2 F" m2 F Spring 不从头开发已有的工具。是以,在Spring中你将发现没有日志记实的包,没有毗连池,没有分布事务调剂。这些均有开源项目供给(例如 Commons Logging 用来做所有的日志输出,或Commons DBCP用来作数据毗连池),或由你的应用轨范处事器供给。因为同样的的原因,我们没有供给O/R mapping层,对此,已有有好的解决法子如Hibernate和JDO。% r$ t/ q2 ~; J5 v# T
Spring的方针是使已存在的手艺加倍易用。例如,尽管我们没有底层事务协调措置,但我们供给了一个抽象层笼盖了JTA或任何其他的事务策略。$ a s% p: \1 s8 |* z$ I
Spring没有直接和其他的开源项目竞争,除非我们感应我们能供给新的一些工具。例如,象良多开发人员,我们从来没有为Struts欢快过,而且感应在MVC web framework中还有改良的余地。在某些规模,例如轻量级的 IoC容器和AOP框架,Spring有直接的竞争,可是在这些规模还没有已经较为风行的解决方案。(Spring在这些区域是开路先锋。) |