对比分析Struts+Spring+Hibernate与EJB3异同,越详细越好
1. J2EE --java Enterprise Editon 一般为服务器端程序的应用,java它对开发基于Web的多层{即是J2EE}应用提供了功能上的支持。
2. J2EE本身提供了一些框架。比如, Enterprise Java-Beans (EJB) container
Enterprise Java Beans (EJB) 提供了一个框架来开发和实施分布式商务逻辑,显著地简化了具有可伸缩性和高度复杂的企业级应用的开发
3. 而现在比较流行开源框架,主要是struts,hibernate,spring等
struts+hibernate+spring三大框架:
struts:是在原有mvc基础上实现在代码分离等功能;
hibernate:可以把我们的关系型数据库转换成我们在JAVA中的面像对像来使用;
Spring:J2EE框架被大规模地运用到项目中,而项目总要负责这些框架以及自己业务代码的连接,使之真正融合到一起。Spring就是专注于这个问题的,它和Hibernate融合的很好。
框架说白了就是JAVA工作者多年以来总结出的一些开发标准。让我们可以以成功的经验模式来开发我们自已的系统,一般使用框架的好处是
·在好的框架下,开发者只需要写一些必须的代码;他们不需要直接接触底层的API。 这一点很重要。
·经过良好设计的框架可以为程序提供清晰的结构并且提高程序的内聚性。好清晰的结构使得其他人可以更容易加入项目。
·一个容易使用的框架可以通过一些例子和文档为用户提供最佳实践。
·采用成功的框架的代码比自己的代码容易测试
J2EE本身提供了一些框架。比如, Enterprise Java-Beans (EJB) container或者 Servlet engine 而这些框架一般在中小工程中我们都不会使用,会让我们把大量的时间浪费在开发框架上。
而现在比较流行开源框架,主要是struts,hibernate,spring等
比如struts是在原有mvc基础上实现在代码分离等功能,非常好用。
而hibernate可以把我们的关系型数据库转换成我们在JAVA中的面像对像来使用。从而让我们在开发时不需要直接写SQL语句,比如database.getName();就可以直接把数据库中的用户名取出来。
Spring
J2EE框架被大规模地运用到项目中,而项目总要负责这些框架以及自己业务代码的连接,使之真正融合到一起。Spring就是专注于这个问题的,它和Hibernate融合的很好。
这三种框架在一起并不冲突,所以现在最常用的框架就是
struts+hibernate+spring就像我们盖房子一样,先把框架搭好,我们在在上面写代码就很规范。
Struts框架介绍 :
Struts只是一个MVC框架(Framework),用于快速开发Java Web应用。Struts实现的重点在C(Controller),包括ActionServlet/RequestProcessor和我们定制的 Action,也为V(View)提供了一系列定制标签(Custom Tag)。但Struts几乎没有涉及M(Model),所以Struts可以采用JAVA实现的任何形式的商业逻辑。
Spring是一个轻型容器(light-weight container),其核心是Bean工厂(Bean Factory),用以构造我们所需要的M(Model)。在此基础之上,Spring提供了AOP(Aspect-Oriented Programming, 面向层面的编程)的实现,用它来提供非管理环境下申明方式的事务、安全等服务;对Bean工厂的扩展ApplicationContext更加方便我们实 现J2EE的应用;DAO/ORM的实现方便我们进行数据库的开发;Web MVC和Spring Web提供了Java Web应用的框架或与其他流行的Web框架进行集成。
就是说可将两者一起使用,达到将两者自身的特点进行互补。
spring 框架介绍 :
它关注的领域是其他许多流行的Framework未曾关注的。Spring要提供的是一种管理你的业务对象的方法。
Spring既是全面的又是模块化的。Spring有分层的体系结构,这意味着你能选择仅仅使用它任何一个独立的部分,而它的架构又是内部一致。 因此你能从你的学习中,得到最大的价值。例如,你可能选择仅仅使用Spring来简单化JDBC的使用,或用来管理所有的业务对象。
它的设计从一开始就是要帮助你编写易于测试的代码。Spring是使用测试驱动开发的工程的理想框架。
Spring不会给你的工程添加对其他的框架依赖。Spring也许称得上是个一站式解决方案,提供了一个典型应用所需要的大部分基础架构。它还涉及到了其他framework没有考虑到的内容。
尽管它仅仅是一个从2003年2月才开始的开源项目,但Spring有深厚的历史根基。
Spring架构上的好处
在我们进入细节之前,让我们来看看Spring能够给工程带来的种种好处:
Spring能有效地组织你的中间层对象,不管你是否选择使用了EJB。如果你仅仅使用了Struts或其他为J2EE的 API特制的framework,Spring致力于解决剩下的问题。
Spring能消除在许多工程中常见的对Singleton的过多使用。根据我的经验,这是一个很大的问题,它降低了系统的可测试性和面向对象的程度。
通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消除各种各样自定义格式的属性文件的需要。曾经对某个类要寻找的是哪个 魔法般的属性项或系统属性感到不解,为此不得不去读Javadoc甚至源编码?有了Spring,你仅仅需要看看类的JavaBean属性。 Inversion of Control的使用(在下面讨论)帮助完成了这种简化。
通过把对接口编程而不是对类编程的代价几乎减少到没有,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)。
1.法制 VS “民主”
EJB规范一直由国际组织JCP来制定,一经通过,即作为官方标准,且各厂商都会不遗余力的推动,所以对于企业应用来说,EJB就是法,以EJB为企业应用的基础架构暂且称为法治;Spring来自开源社区,由众多的开源软件开发者参与,逐步形成的一种流行的体系标准,它的设计以IoC(反转控制)为核心,提倡所谓的“零”侵入设计原则,这里暂且称之为民主。
支持EJB的应用服务器一般是一个大而全的产品,包括了构建企业应用需要的方方面面,如果需要额外扩展一般不容易,如果对一个应用服务器不满意的话,那么可以且也只能更换整个应用服务器了,好在由于应用服务器市场百花齐放,从免费到低端再到高端,您可以任意选择;Spring从IoC容器发展而来,通过不断集成AOP、MVC、OR/Mapping以及几乎您能想到的各项服务而提供完善的企业应用架。对于一个应用,你可以自由选择具体的技术框架的实现,SSH就是最常用一套组合,然而且不说是否每个架构师拥有正确选择的能力,无论如何,最终的选择在设计之初一旦确定,要想更换便不那么容易,你不可能轻松的将一个基于Spring + Struts的应用轻松的移植到Spring + WebWork,更不能轻松的将一个基于Spring + Hibernate的应用轻松的移植到Spring + iBatis,所以对于需要长期维护和发展的应用来说,将只能寄希望于你采用的框架都能够很好的发展,并且能在升级的同时保证向前的兼容性。
综上所述,EJB由于对于整个世界是标准的,就好像是一部国际法,一旦遵循,全球通用,你可以比较轻松的在WebSphere、WebLogic甚至 JBoss之间进行切换,所以如果选择EJB,你将在一个”法制”的环境下获得最大的民主;而Spring对于整个世界看似民主的,然而一旦整套架构确定下来,却成了专制,犹如美国式的民主,一旦被它征服,就成为它的专政统治了,想挣脱它的控制可就不那么容易了,其中的利害,大家细细品味吧。
2.轻量级组件 VS 轻量级内核 VS 轻量级容器
关于轻量级内核,不论属实是否,现今的应用服务器都宣称采用了微内核技术,在此基础上建立Java EE的各项服务构建成完善的应用服务器;而Spring本身就是一个基于IoC的轻量内核,然后通过集成第三方的服务器来提供完整的架构。
EJB组件曾经被认为是一个重量级的组件,而备受批评,EJB3规范的重要目标就是简化EJB的开发,提供一个容器管理的轻量级的组件方案。
但是有必要提醒一下,轻量级的组件,并不意味着提供服务的容器是轻量的,不管是EJB2还是EJB3,应用服务器因为需要管理组件的负责生命周期以及行为,并且内置提供了各项服务,容器自然是一个重量级的服务;至少现在看来,现有的Application Server提供的容器都还不足够的轻量,从个人偏好来说,我就非常喜欢JBoss 2.4这个版本,它有我需要的功能,同时又够简单,而现在,JBoss 4的启动速度已经逐渐让我对它对失去了耐心。
而对于Spring,也有同样的问题,轻量级的内核,也不意味着整个框架是轻量的,更不意味着基于Spring的整个应用架构是轻量的。对于 Spring,你需要去寻找并粘合各种服务,然后让他们能够稳定的在一起工作,如果应用对技术的需求较多,伸缩性要求也较高,你就会不断的在应用服务中加入其他服务,如:资源池、消息队列、集群等。当加入这些后,Spring的解决方案已经和Java EE Application Server解决方案一样重量级了。
追求简单、轻量,是每一个应用架构的目标,对于企业应用的构建来说,轻量级组件标准+轻量的内核+轻量级的容器,并以此构建轻量级的应用平台,才是最终需要的。如果有轻量级的容器出现,将帮助EJB3在企业应用中重新占据有利的地位。
3.可管理性与可控性
这个问题对于一次性交付的项目也许不是问题,但是对于质量要求更高、生命周期更长的产品,却是衡量平台和架构的重要因素。
基于Spring架构的应用,由于过分的自由和灵活,随着项目的进展,逐渐集成的第三方框架越来越多,很难保证集成的服务和编写的组件中有没有漏洞,甚至相互之间有严重的冲突,那么,掌控整个项目的质量成了难题,光是一页接一页的配置文件,就知道今后的维护成本也就随之增高,回想一下EJB2.0时代的ejb-jar.xml吧;而EJB因为集成的都是标准服务,而且组件模型也是固定的,加之应用服务器一般提供控制台,用来查看运行时的各项属性,并可对服务进行实时的管理,显然比Spring开发的应用可控性更好。
#p#
4.功能性对比
4.1、IoC容器,AOP能力
在IoC的能力Spring要略强一些,但是在EJB3中可以完全用Annotation方式进行注入,在开发上要简单很多,对于一些相对比较固定的注入,采用Annotation更好,而对于一些可能需要经常变动的注入,XML更加灵活,EJB3刚好提供了这样的两种解决方案。如果你已经患有XML恐惧症,那么EJB3无疑将给您以解脱。
同时,EJB3组件中,支持多种方式注入,比如依赖于名称、接口或者JNDI名,另外还支持使用@PersistenceContext注入EntityManager,@Resource注入服务器资源,如EJBContext、TimerService等,而一些Annotation已经成为JDK6的一部分,将来可能直接被JDK支持。
AOP方面,如果您需要彻底的AOP,并且在Spring中集成了AspectJ,那么EJB3自然无法比拟,但是如果您的项目以够用为原则,只需要一般方法拦截意义上的AOP,EJB3提供的各种回调方法应该可以满足您的要求了。
4.2、事务处理
EJB的看家本领,Spring也通过提供TransactionTemplate以及集成第三方事务处理器来支持JTA,都支持申明式事务,可以BMT,CMT,但无论如何,移植的器官总也没有自身长的好吧。
4.3、分布式能力
一般使用Java EE体系的公司都认为这是EJB的最大长处,但是实施并不如想象那样,一来绝大多数都是Web应用,依赖Web提供的分布式能力已经可以满足90%的需要了,二来大家基本上都是Web容器和EJB容器整体部署,EJB组件的分布部署少之又少。当然如果您需要Web层和应用层分开部署,那么Spring一定不在你的考虑范围之内了。
4.4、Cluster能力
Cluster也是EJB的传统优势,但是老师说,能够发挥EJB集群优势的地方并不多,因为即使项目中采用了EJB,一般也采用Stateless SessionBean,而使用HttpSession Cluster,既然如此,无论EJB还是Spring,大家都是平等的。当然,如果您正在构建一个大型的应用,对集群的能力要求非常高,比如需要事务级的Cluster,而且还有分布式的需求,那么估计没有多少因素会让您考虑Web Server + Spring的架构了。
4.5、Web Services
EJB3中的Web Service和EJB组件集成得如此之好,使用起来再简单不过了,如下面实例所示,JAX-WS也将逐步成为Java Web Service事实标准;至于Spring可以实现各种基于Http的远程调用方法,其优势并不明显。
@Remote
@Local
@WebService(endpointInterface = "jfox.test.ejb3.webservice.Calculator")
public class CalculatorBean implements CalculatorRemote, CalculatorLocal {
public int add(int x, int y) {
return x + y;
}
public int subtract(int x, int y) {
return x - y;
}
}
4.6、集成第三方框架
如果需要集成第三方框架的时候,估计您需要Spring了,当然前提是Spring已经给出很好的集成方案;而如果采用EJB,则需要视特定的应用服务器了,推荐当类库来用,或者使用context listener来启动,是在不行,只能基于特定的应用服务器来进行集成,一般来说,应用服务器均提供了JMX集成能力。
5.总结
纵观人类历史,官方过于强势,则必然官逼民反;而民间力量过于强大,社会必将不稳定,这都是我们不愿看到的,在技术世界里也一样。对于EJB3 和Spring这两种方案,Spring现在处于压倒性的优势一方,希望EJB3的出现,一来能为官方挽回一些失去的领地,二来也能继续引发更多的探讨,不再拘束于一家之言,只有百家争鸣的环境,才能让开发人员和架构人员对企业应用的构建认识得更加完善,所以最好的方式是EJB3和Spring互相促进,和谐发展。
期待一个轻量的真正以开发需求为中心的EJB3应用服务器的出现,为疲软的EJB市场注入新的活力!
在J2EE里,Enterprise Java Beans(EJB)称为Java 企业Bean,是Java的核心代码,分别是会话Bean(Session Bean),实体Bean(Entity Bean)和消息驱动Bean(MessageDriven Bean)。
struts框架和springmvc的区别(struts框架和ssm框架)
关于Struts2和SpringMVC的区别简单介绍1、SpringMVC和Struts2的区别机制:springmvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同。性能:spring会稍微比struts快。2、SpringMVC是Spring框架的一个模块,Spring框架提供了构造Web应用程序的全能MVC模块,SpringMVC分离了Controller(控制器)、...
Struts2.0与Struts1.2的区别?
struts1.x之间差别不大,你具体提到struts1.2似乎没什么意义~所以你提的问题其实就是struts1和struts2的差别。先大致介绍下struts1和struts2 struts:过去最流行的web MVC组件,apache项目组的一个开源项目 struts2:现在非常流行的web MVC组件,是apache用struts1和webwork组合出来的产品 两者都是web ...
spring MVC跟struts MVC的区别
基于Web的MVC framework在J2EE的世界内已是空前繁荣。TTS网站上几乎每隔一两个星期就会有新的MVC框架发布。目前比较好的MVC,老牌的有Struts、Webwork。新兴的MVC框架有Spring MVC、Tapestry、JSF等。这些大多是著名团队的作品,另外还有一些边缘团队的作品,也相当出色,如Dinamica、VRaptor等。这些框架都...
struts 和spring 有什么区别
通常更多的我们对比 SpringMVC与Struts 把这张图放在这里,我是想说SpringMVC和Struts2真的是不一样的,虽然在都有着核心分发器等相同的功能组件(这些由MVC模式本身决定的)。为什么SpringMVC会赢得最后的胜利呢?谈几点我自己的看法:第一、MVC框架的出现是为了将URL从HTTP的世界中映射到JAVA世界中,这...
struts1和struts2的区别??
一、主体不同 1、struts1:是Apache软件基金会(ASF)赞助的一个开源项目。它最初是Jakarta项目中的一个子项目,并在2004年3月成为ASF的顶级项目。2、struts2:Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。二、框架不同 1、struts1:通过...
说说个人对Struts,Spring,Hibernate分别是什么的理解?(其中要包括Struts...
这是三个相互配合的框架组合,也是目前较为成熟的Java Web开发框架组合。Struts(现在主要用Struts 2了)主要负责Web层的交互,也就是页面和代码间传参、类型转换、输入校验、国际化、文件上传下载这些直接与用户进行网页交互的功能,其核心机制是拦截器,将这些web开发的通用功能给封装了,便于直接利用。Hiber...
java编程中,struts1,struts2,hibernate,spring,ajax分别有什么作用或者...
struts1,struts2应用于j2ee的MVC框架,主要用于页面展现,参数校验和处理,以及跳转控制;hibernate是j2ee的持久层框架,用来封装对JDBC的操作,避免了逻辑层直接写SQL语句,而是用HQL语句这种面向对象的操作去和数据库打交道,该框架封装了数据库存取的细节,对于业务层来说不必关心底层数据库,只需要调用API...
struts2和spring3.0比较有什么优势?
可以他的意思是说用spring mvc 代替struts2 用spring mvc的也大有人在啊 spring最主要的功能还是在dependency injection 不能直接拿spring和struts进行比较的,struts做的是表现层,spring做的整合 只能拿spring mvc和struts来比
1.谁能简述下Struts中的标记库 要详解 !!!
Struts标记库 JSP视窗组件所使用的struts标记库由四类标记组成:2. Bean标记:用来在JSP页中管理bean 3. 逻辑标记:用来在JSP页中控制流程 4. HTML标记:用来生成HTML标记,在表单中显示数据,使用会话ID对URL进行编程 5. 模板标记:使用动态模板构造普通格式的页 2.1 Bean标记 这个标记库中包含用于...
javaweb开发框架有哪些(javaweb开发框架有哪些)
Java目前主流框架都有哪些(java常用框架有哪些)1、Struts:Struts是一个基于SunJ2EE平台的MVC框架,主要是采用Servlet和JSP技术来实现的Spring:Spring是轻量级的J2EE应用程序框架。2、WebWork【Java开源Web开发框架】WebWork是由组织开发的,致力于组件化和代码重用的拉出式MVC模式J2EEWeb框架。Struts【Java...
栋炭西力:一、Struts Struts是Apache软件基金下Jakarta项目的一部分.Struts框架的主要架构设计和开发者是Craig R.McClanahan.Struts是目前Java Web MVC框架中不争的王者.经过长达五年的发展,Struts已经逐渐成长为一个稳定、成熟的框架,并...
新乐市18224333570: spring和struts2的区别是什么? - ?
栋炭西力: Struts2 简单来说,就是一个拦截器栈 也就是一系列的拦截器. 处理用户的请求,OGNL的使用,表单验证 等都是默认的拦截器在起作用.而spring的拦截器,主要体现在AOP的事务管理方面,还有比如一些错误或者异常的日志的显示 也是通过配置spring的log拦截器来实现的.拦截器 顾名思义 就是拦截一些请求并加以相应的处理.所以广义来说 spring和 struts2的拦截器的工作原理都一样.只是功能不一样而已
新乐市18224333570: Struts与Spring 的区别?
栋炭西力: Struts最早是作为Apache Jakarta项目的组成部分问世运作.项目的创立者希望通过对该项目的研究,改进和提高Java Server Pages、Servlet、标签库以及面向对象的技术水准. Struts这个名字来源于在建筑和旧式飞机中使用的支持金属架.它...
新乐市18224333570: spring和struts的区别 - ?
栋炭西力: 它们是两种框架,简单的来说struts专注于表示层,Spring专注于业务层,同时Spring能有效的整合Struts和Hibernate(持久层),达到统一控制.你看可以在网上找一下资料看看,很多的
新乐市18224333570: Spring和Struts的区别在哪里? - ?
栋炭西力: Spring 是个容器,只负责管理javabean和依赖注入,struts是web框架,负责接收请求,然后转发.最后再返回给前端.
新乐市18224333570: Struts + Hibernate+Spring的优缺点是什么? - ?
栋炭西力: Struts优点:对视图层进行封装 更好的分离视图层和控制层 对数据进行封装 缺点:请看优点 Spring优点: 用依赖注入模式大幅度的减少了程序之间的耦合性 并很好的实现了各种JAVA的设计模式 强制使用者养成用接口编程的习惯 缺点:请看优点 Hibernate: 用操作对象的方式操作数据库 将对数据库的操作面向对象化 并对一些数据库操作进行了封装 缺点:请看优点 三个框架和到一起的优点:非常明确的实现了MVC模式 三个框架和到一起的缺点:请看优点 你最好是了解了MVC模式之后再使用框架 当你真正的使用了之后你就会发现他的缺点在什么地方 对你的忠告是:框架不是必须使用的 使用的话不一定是真正被框住的
新乐市18224333570: struts和springmvc的区别 - ?
栋炭西力: SpringMVC 和Struts2的区别 1. 机制: spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同. 2. 性能: spring会稍微比struts快.spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每...
新乐市18224333570: Struts spring hibernate相比优越性......? - ?
栋炭西力: 这几个框架都是作用在J2EE应用的不同层上,我觉得没有什么太大的可比性吧.倒是总是将这几个框架搭配起来使用.Struts作用在页面表示层,Spring一般作用在业务逻辑层(也可以使用在其他层次),Hibernate一般作用在后台数据层.
新乐市18224333570: struts2和spring的区别 - ?
栋炭西力: 1:spring3 mvc开发效率高于struts2:spring3 mvc可以认为已经100%零配置3:struts2是类级别的拦截, 一个类对应一个request上下文,springmvc是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应 所以说从架构本...
新乐市18224333570: 哪位高手说说struts2 与spring mvc 各自的优缺点 - ?
栋炭西力: 功能上没啥区别.struts2 比较重量级点.功能强大.spring mvc 更轻量,开发灵活.萝卜白菜,各有所爱. 性能上来说,还真不是没啥差别.在大并发下,spring mvc 优势很明显.