Java EE开发四大经常使用框架

咱们对Java EE的框架有过不少介绍, 本文将对Java EE中经常使用的四个框架作一下系统的概括,但愿你们喜欢。java

Struts程序员

Struts是一个基于Sun Java EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的。web

Struts框架可分为如下四个主要部分,其中三个就和MVC模式紧密相关:spring

一、模型 (Model),本质上来讲在Struts中Model是一个Action类(这个会在后面详细讨论),开发者经过其实现商业逻辑,同时用户请求经过控制器(Controller)向Action的转发过程是基于由struts-config.xml文件描述的配置信息的。数据库

二、视图(View),View是由与控制器Servlet配合工做的一整套JSP定制标签库构成,利用她们咱们能够快速创建应用系统的界面。编程

三、控制器(Controller),本质上是一个Servlet,将客户端请求转发到相应的Action类。设计模式

四、一堆用来作XML文件解析的工具包,Struts是用XML来描述如何自动产生一些JavaBean的属性的,此外Struts还利用XML来描述在国际化应用中的用户提示信息的(这样一来就实现了应用系统的多语言支持)。服务器

spring架构

Spring是轻量级的Java EE应用程序框架。app

Spring的核心是个轻量级容器(Container),实现了IoC(Inversion of Control)模式的容器,Spring的目标是实现一个全方位的整合框架,在Spring框架下实现多个子框架的组合,这些子框架之间彼此能够独立,也可使用其它的框架方案加以替代,Spring但愿提供one-stop shop的框架整合方案 。

Spring不会特別去提出一些子框架来与现有的OpenSource框架竞争,除非它以为所提出的框架夠新夠好,例如Spring有本身的 MVC框架方案,由于它以为现有的MVC方案有不少能够改进的地方,但它不强迫您使用它提供的方案,您能够选用您所但愿的框架来取代其子框架,例如您仍能够在Spring中整合您的Struts框架 。

Spring的核心概念是IoC,IoC的抽象概念是「依赖关系的转移」,像是「高层模组不该该依赖低层模组,而是模组都必须依赖于抽象」是 IoC的一种表现,「实现必须依赖抽象,而不是抽象依赖实现」也是IoC的一种表现,「应用程序不该依赖于容器,而是容器服务于应用程序」也是IoC的一种表现。

Spring的架构性的好处:

Spring能有效地组织你的中间层对象,不管你是否选择使用了EJB。若是你仅仅使用了Struts或其余的包含了Java EE特有APIs的framework,你会发现Spring关注了遗留下的问题。

Spring能消除在许多工程上对Singleton的过多使用。根据个人经验,这是一个主要的问题,它减小了系统的可测试性和面向对象特性。

Spring 能消除使用各类各样格式的属性定制文件的须要,在整个应用和工程中,可经过一种一致的方法来进行配置。曾经感到迷惑,一个特定类要查找迷幻般的属性关键字或系统属性,为此不得不读Javadoc乃至源编码吗?有了Spring,你可很简单地看到类的JavaBean属性。倒置控制的使用(在下面讨论)帮助完成这种简化。Spring能经过接口而不是类促进好的编程习惯,减小编程代价到几乎为零。

Spring被设计为让使用它建立的应用尽量少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。

使用Spring构建的应用程序易于单元测试。

Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。

Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适于许多web应用。例如,Spring能使用AOP提供声明性事务而不经过使用EJB容器,若是你仅仅须要与单个的数据库打交道,甚至不须要JTA实现。

Spring为数据存取提供了一致的框架,不管是使用JDBC或O/R mapping产品(如hibernate)。

Spring确实使你能经过最简单可行的解决办法解决你的问题。这些特性是有很大价值的。

Spring能作什么?

Spring提供许多功能,在此我将快速地依次展现其各个主要方面。

任务描述:

首先,让咱们明确Spring范围。尽管Spring覆盖了许多方面,但咱们已经有清楚的概念,它什么应该涉及和什么不该该涉及。

Spring的主要目的是使Java EE易用和促进好编程习惯。

Spring 不从新开发已有的东西。所以,在Spring中你将发现没有日志记录的包,没有链接池,没有分布事务调度。这些均有开源项目提供(例如 Commons Logging 用来作全部的日志输出,或Commons DBCP用来做数据链接池),或由你的应用程序服务器提供。由于一样的的缘由,咱们没有提供O/R mapping层,对此,已有有好的解决办法如Hibernate和JDO。

Spring的目标是使已存在的技术更加易用。例如,尽管咱们没有底层事务协调处理,但咱们提供了一个抽象层覆盖了JTA或任何其余的事务策略。

Spring没有直接和其余的开源项目竞争,除非咱们感到咱们能提供新的一些东西。例如,象许多开发人员,咱们历来没有为Struts高兴过,而且感到在MVC web framework中还有改进的余地。在某些领域,例如轻量级的 IoC容器和AOP框架,Spring有直接的竞争,可是在这些领域尚未已经较为流行的解决方案。(Spring在这些区域是开路先锋。)

Spring也得益于内在的一致性。

全部的开发者都在唱一样的的赞歌,基础想法依然是Expert One-on-One Java EE设计与开发的那些。

而且咱们已经可以使用一些主要的概念,例如倒置控制,来处理多个领域。

Spring在应用服务器之间是可移植的。

固然保证可移植性老是一次挑战,可是咱们避免任何特定平台或非标准化,而且支持在WebLogic,Tomcat,Resin,JBoss,WebSphere和其余的应用服务器上的用户。

Spring的核心便是个IoC/DI的容器,它能够帮程序设计人员完成组件之间的依赖关系注入,使得组件之间的依赖达到最小,进而提升组件的重用性,Spring是个低侵入性(invasive)的框架,Spring中的组件并不会意识到它正置身于Spring中,这使得组件能够轻易的从框架中脱离,而几乎不用任何的修改,反过来讲,组件也能够简单的方式加入至框架中,使得组件甚至框架的整合变得容易。

Spring最为人重视的另外一方面是支持AOP(Aspect-OrientedProgramming),然而AOP框架只是Spring支持的一个子框架,说Spring框架是AOP框架并非一件适当的描述,人们对于新奇的 AOP关注映射至Spring上,使得人们对于Spring的关注集中在它的AOP框架上,虽然有所误解,但也突显了Spring的另外一个使人关注的特点。

Spring也提供MVC Web框架的解決方案,但您也能够将本身所熟悉的MVC Web框架与Spring解合,像是Struts、Webwork等等,均可以与Spring整合而成为进用于本身的解決方案。Spring也提供其它方面的整合,像是持久层的整合如JDBC、O/R Mapping工具(Hibernate、iBATIS)、事务处理等等,Spring做了对多方面整合的努力,故说Spring是个全方位的应用程序框架。

Hibernate

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了轻量级的对象封装,使得Java程序员可使用对象编程思惟来操纵数据库。Hibernate能够在应用EJB的JavaEE架构中取代CMP,完成数据持久化。它还能够应用在任何使用JDBC的场合,既能够在Java的客户端程序实用,也能够在Servlet/JSP的Web应用中使用

Hibernate的工做方式

Hibernate不会对您形成妨碍,也不会强迫您修改对象的行为方式。它们不须要实现任何难以想象的接口以便可以持续存在。唯一须要作的就是建立一份XML“映射文档”,告诉Hibernate您但愿可以保存在数据库中的类,以及它们如何关联到该数据库中的表和列,而后就能够要求它以对象的形式获取数据,或者把对象保存为数据。与其余解决方案相比,它几乎已经很完美了。

因为本文只是一篇介绍性的文章,因此不会引入构建和使用Hibernate映射文档的具体例子(我在《Hibernate: A Developer's Notebook》一书的头几章中已经介绍了一个例子)。此外,在网上和Hibernate的在线文档中,还能够找到一些不错的例子,请参见下面的“其余信息”部分。它实际上至关直观。应用程序对象中的属性以一种简单而天然的方式与正确的数据库结构相关联。

运行时,Hibernate读取映射文档,而后动态构建Java类,以便管理数据库与Java之间的转换。在 Hibernate中有一个简单而直观的API,用于对数据库所表示的对象执行查询。要修改这些对象,(通常状况下)只需在程序中与它们进行交互,而后告诉Hibernate保存修改便可。相似地,建立新对象也很简单;只需以常规方式建立它们,而后告诉Hibernate有关它们的信息,这样就能在数据库中保存它们。

Hibernate API学习起来很简单,并且它与程序流的交互至关天然。在适当的位置调用它,就能够达成目的。它带来了不少自动化和代码节省方面的好处,因此花一点时间学习它是值得的。并且还能够得到另外一个好处,即代码不用关心要使用的数据库种类(不然的话甚至必须知道)。我所在的公司就曾有过在开发过程后期被迫更换数据库厂商的经历。这会形成巨大的灾难,可是借助于Hibernate,只须要简单地修改Hibernate配置文件便可。

这里的讨论假定您已经经过建立Hibernate映射文档,创建了一个关系数据库,而且拥有要映射的Java 类。有一个Hibernate“工具集”可在编译时使用,以支持不一样的工做流。例如,若是您已经拥有Java类和映射文档,Hibernate能够为您建立(或更新)必需的数据库表。或者,仅仅从映射文档开始,Hibernate也可以生成数据类。或者,它能够反向设计您的数据库和类,从而拟定映射文档。还有一些用于Eclipse的alpha 插件,它们能够在IDE中提供智能的编辑支持以及对这些工具的图形访问。

使用Hibernate的场合

既然Hibernate看起来如此灵活好用,为何还要使用其余的工具呢?下面有一些场景,能够帮助您作出判断(或许经过提供一些比较和上下文,能够有助于鉴别很是适用Hibernate的场合)。

若是应用对于数据存储的须要十分简单——例如,您只想管理一组用户优先选择——您根本不须要数据库,更不用说一个优秀的对象-关系映射系统了(即便它也如Hibernate这般易于使用)!从Java1.4开始,有一个标准的Java Preferences API能够很好地发挥这个做用。

对于熟悉使用关系数据库和了解如何执行完美的SQL查询与企业数据库交互的人来讲,Hibernate彷佛有些碍手碍脚,这就像带有动力和自动排挡的快艇车会使注重性能的赛车驾驶员不耐烦同样。若是您属于这种人,若是您所在的项目团队拥有一个强大的DBA,或者有一些存储过程要处理,您可能想研究一下iBATIS。Hibernate的建立者自己就把iBATIS看成是另外一种有趣的选择。我对它颇有兴趣,由于咱们曾为一个电子商务站点开发了一个相似的系统(其功能更为强大),并且从那时到如今,咱们已经在其余环境中使用过它,尽管在发现Hibernate以后,在新项目中咱们一般更喜欢使用Hibernate。您能够认为,以SQL为中心的解决方案(好比iBATIS)是“反向的”对象/关系映射工具,而 Hibernate是一个更为传统的ORM。

固然,还有其余的外部缘由会致使采用另外的方法。好比,在一个企业环境中,必须使用成熟的EJB架构(或者其余的一些非普通对象映射系统)。能够为提供本身的数据存储工具的平台量身定作代码,好比Mac OS X's CoreData。使用的多是像XML DTD这样的存储规范,而它根本不涉及关系数据库。

可是,若是您使用的是富对象模型,并且想要灵活、轻松且高效地保存它(不管您是否正要开始或已经决定使用关系数据库,只要这是一个选择——并且存在可用的优秀免费数据库,好比MySQL,或可嵌入Java的HSQLDB,它就应该始终是一个选择),那么 Hibernate极可能就是您理想的选择。您可能会惊讶于节省的时间之多,以及您将会多么地喜欢使用它。

Swing

图形用户接口(GUI)库最初的设计目的是让程序员构建一个通用的GUI,使其在全部的平台上都可以正常的显示。可是比较遗憾的是AWT产生的是在各系统看来都一样欠佳的图形用户接口,JAVA1.2为老的java1.0 AWT添加了Java基础类(JFC),这是一个被称为“Swing”的GUI的一部分。Swing是第二代GUI开发工具集,AWT采用了与特定平台相关的实现,而绝大部分Swing组件却不是。Swing是构筑在AWT上层的一组GUI组件的集合,为了保证可移植性,它彻底用Java语言编写,与AWT相比,Swing提供了更完整的组件,引入了许多新的特性和能力。Swing提供了更多的组件库,如:JTable,JTree,Jcombox。Swing也加强了AWT中组件的功能。正是由于Swing具有了如此多的优点因此咱们之后在开发中都使用Swing。JComponent类是Swing组件的基类,而JComponent继承自Container类,所以,全部的Swing组件都是AWT的容器。Swing采用了MVC设计模式。

相关文章
相关标签/搜索