Spring 3和Java EE 6 –不公平和不完整的比较

这篇小文章的初稿标题为“ Spring&Java EE –比较苹果和橙子”。 在撰写本文时,我了解到可以比较Spring Framework和Java EE,但这始终是不公平且不完整的工作。

Java for Enterprise和Spring Framework的发展紧密地联系在一起。 两者相互依存,部分复制了好的概念。 在表1中,您可以看到一个简化的时间表,其中包含Java平台企业版和Spring框架的一些关键里程碑。

该表说明,仅将Java EE v6与Spring v3.0进行比较是有意义的。 Spring Framework和J2EE的早期版本已过时,并且Java EE v7仍未发布(实际上延迟到2013年第二季度 )。

表1:Java平台和Spring框架的时间表

Java平台,标准版 Java平台企业版 Spring框架 关键 里程碑
2000 J2SE v1.3 J2EE v1.2.1 EJB 2
–困难的部署描述符
–困难的测试 –很多多余的工件
2001 J2SE v1.3
2002年
2003年 J2SE v1.4 J2EE v1.4
2004年 Springv1.0 第一个Spring框架
–依赖注入(IoP)
–没有Java EE应用程序服务器 -J2EE的竞争对手
2005年 Springv1.2
2006年 J2SE v5 Java EE v5 Springv2.0 Java EE 5(EJB 3.0)
–许多功能受Spring启发
–消除了组件,家庭和远程接口
2007年 Springv2.5
2008年
2009年 Java SE v6 Java EE v6 Springv3.0 Java EE 6(EJB 3.1)
–接口是可选的
–单例豆 –类似cron的调度 –嵌入式容器 Spring3.0 –Spring表达语言 –具有改进的REST支持的MVC框架
2010年
2011年 Java SE v 7 Spring v 3.1

因此,在表2中列出了Spring Framework的主要构建块。 控制容器的反转是Spring框架的核心功能。 要了解其工作原理,您还可以检查一个基于Spring框架的最小Java应用程序 (示例代码使用Spring 2.5.6.A,但主要原理与Spring 3.0相同)。

表2:Spring v3.0框架的选定构建基块

控制容器倒置 –控制反转
–依赖注入
–使用XML文件和/或注释进行配置(自动接线)
模型-视图-控制器框架 –域对象(模型)
-通常,JSP模板(视图)
-DispatcherServlet作为Controller的前控制器
面向方面的编程框架 –涉及各方面问题的基本AOP
–基于拦截,并在运行时进行配置
–使用XML文件和/或注释进行配置
批处理框架 -处理大量的记录或任务,包括:日志记录,跟踪,事务,作业管理,资源管理,异常转换
数据访问框架 –为流行的框架提供支持
– JDBC,iBatis,Hibernate,JDO,JPA,Oracle TopLink,Apache OJB和Apache Cayenne
交易管理框架 –抽象机制(JTA仅支持嵌套事务和全局事务,并且需要应用程序服务器)
远程访问框架 –使用Java平台上可用的各种基于RPC的技术来进行客户端连接和在服务器上导出对象

来源和进一步阅读: http : //en.wikipedia.org/wiki/Spring_Framework

在表3中,列出了Java平台企业版6的主要标准和组件。 该表清楚地表明Java EE 6包含许多标准,而不仅仅是一个框架。

表3:Java EE 6体系结构的选定构建块

图片来源 Java EE 6教程 ,p39

客户端机器
– Java Server Faces(JSF 2.0)
– JSP标准标记库(JSTL) –具有JavaServer Faces技术的Ajax – Facelets(XHTML) –支持表达语言(EL) –组件和页面的模板 – Java Servlet技术(Servlet 3.0) –国际化和本地化Web应用程序 Java EE服务器 – Enterprise JavaBeans(企业Bean)组件 – JAX-RS RESTful Web服务 – JAX-WS Web服务端点 –企业Bean作为POJO(会话和消息驱动) –作为POJO的托管Bean –拦截器 – Java依赖注入(JSR 330) –上下文和依赖注入,CDI(JSR 299) –最小化部署描述符需求的注释 –会话Bean中的异步方法调用 –声明和程序安全 – Java消息服务(JMS)API – Java持久性API实体 坚持不懈 – Java数据库连接API(JDBC) – Java持久性API 2.0 – Java EE连接器体系结构 – Java交易API(JTA)

来源和进一步阅读: http : //olex.openlogic.com/wazi/2010/get-started-with-jee6/

实践经验

几年前,当我开始学习Spring Framework 3.0时,我实现了一个带有许多Spring功能的小型Web应用程序。 老实说,这比完成这项任务所必需的更多。 这个小型应用程序具有用于单元和集成测试自动化的大量测试代码。 它具有100%的线路和分支覆盖率。 一段时间后,我决定基于Java EE 6架构实现完全相同的应用程序以比较这两种方法。这两种技术都运行良好,代码大小几乎相同,并且具有良好的可维护性。
一个重要的区别是对测试的支持。 Spring Framework对测试提供了出色的支持,而Java EE 6在此存在一些弱点。 对于Java EE 6,您可以使用Embedded Glassfish,但是这种方法烦人(缓慢(嵌入式容器的启动时间很长))并且配置麻烦。 Spring Framework的另一个突出功能是易于集成旧应用程序。 逐步地更新旧应用程序比较容易,例如,一开始就使用JDBC,事务管理和IoC的一小部分。

结论

  1. 从体系结构的角度来看,Spring和Java EE的模型是竞争者。 取决于组织的策略和约束,两者都会显示出优点和缺点。
  2. 通常不建议将两者结合使用,因为这既浪费EJB容器功能和/或难以维护。 在某些选定的情况下,在Java EE 6应用程序中使用Spring Framework的Building Blocks是有意义的,例如Spring Batch,Data Access。
  3. Spring框架不是标准-它是框架的产品和实现。 这意味着,没有其他供应商。 请记住这一点。

参考: 轻量级Java企业体系结构– Spring 3 Framework与Java EE 6之间的不公平且不完整的比较,来自我们的JCG合作伙伴 Markus Sprunck,位于Software Engineering Candies博客上。


翻译自: https://www.javacodegeeks.com/2012/05/spring-3-and-java-ee-6-unfair-and.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xml配置文件推荐方式

1.XML帮助类 /// <summary>/// Xml帮助类/// </summary>public class XmlHelper{/// <summary>/// 保存xml/// </summary>/// <typeparam name"T"></typeparam>/// <param name"path"></param>/// <p…

AFNetWorking https SSL认证

一般来讲如果app用了web service , 我们需要防止数据嗅探来保证数据安全.通常的做法是用ssl来连接以防止数据抓包和嗅探 其实这么做的话还是不够的 。 我们还需要防止中间人攻击&#xff08;不明白的自己去百度&#xff09;。攻击者通过伪造的ssl证书使app连接到了伪装的假冒的…

查看环境列表_Xfce 4.14桌面环境正式发布,想要图形界面又想节省内存?就它了...

1. Xfce 4.14桌面环境正式发布&#xff0c;它有什么新特性&#xff1f;本文主要讲解Xfce 4.14桌面环境正式发布&#xff0c;它有什么新特性。Xfce已经开发了4年多&#xff0c;但是这个周末终于看到了期待已久的Xfce 4.14的发布。Xfce 4.14是这个轻量级桌面环境的最新稳定版本&a…

卷积神经网络语音识别_用于物体识别的3D卷积神经网络

本文提出了一种基于CNN的3D物体识别方法&#xff0c;能够从3D图像表示中识别3D物体&#xff0c;并在比较了不同的体素时的准确性。已有文献中&#xff0c;3D CNN使用3D点云数据集或者RGBD图像来构建3D CNNs&#xff0c;但是CNN也可以用于直接识别物体体积表示的体素。本文中&am…

#获得请求来源ip_以太网数据包TCP、IP、ICMP、UDP、ARP协议头结构详解

以太网首部目地MAC地址(8字节)源MAC地址(8字节)类型(2字节)1、IP头的结构版本(4位)头长度(4位)服务类型(8位)封包总长度(16位)封包标识(16位)标志(3位)片断偏移地址(13位)存活时间(8位)协议(8位)校验和(16位)来源IP地址(32位)目的IP地址(32位)选项(可选)填充(可选)数据(1)字节和…

c# ef报错_C# EF调用MySql出现“未将对象引用设置到对象的实例”错误解决方案

C# EF调用MySql出现“未将对象引用设置到对象的实例”错误解决方案---修改步骤---1.打开Nuget管理包&#xff0c;把Mysql.Data替换为6.10.0以下任意版本。这里选择的是6.8.82.修改完毕后&#xff0c;继续把Mysql.Data.Entity也修改为对应版本6.8.8。3.安装完成后可以看到App.Co…

ServletRequest startAsync()的有用性有限

前段时间我遇到了Servlet 3.0中AsyncContext.start&#xff08;…&#xff09;的目的是什么&#xff1f; 题。 引用上述方法的Javadoc &#xff1a; 使容器调度线程&#xff08;可能从托管线程池中&#xff09;运行指定的Runnable 。 提醒大家&#xff0c; AsyncContext是Servl…

mysql所支持的比较运算符_mysql比较运算符有哪些?Mysql比较运算符详解

比较运算符可用于比较数字和字符串。今天发一篇Mysql比较运算符详解&#xff0c;希望对初学者有所帮助&#xff0c;虽然现在流行NoSQL&#xff0c;但是MYSQL还是很有用的&#xff0c;数字作为浮点值进行比较&#xff0c;字符串以不区为例进行比较&#xff0c;运算符用于比较表达…

Http Invoker的Spring Remoting支持

Spring HTTP Invoker是Java到Java远程处理的重要解决方案。 该技术使用标准的Java序列化机制通过HTTP公开服务&#xff0c;并且可以被视为替代解决方案&#xff0c;而不是Hessian和Burlap中的自定义序列化。 而且&#xff0c;它仅由Spring提供&#xff0c;因此客户端和服务器应…

学习后缀自动机想法

小序&#xff1a;学习后缀自动机是要有耐心的&#xff0c;clj的论文自己看真心酸爽&#xff01;&#xff08;还是自己太弱&#xff0c;ls&#xff0c;oyzx好劲啊&#xff0c;狂膜不止&#xff09; 刚刚在写博客之前又看了篇论文&#xff0c;终于看懂了&#xff0c;好开心 正文&…

mysql 分组top_MySQL:如何查询出每个分组中的 top n 条记录?

问题描述需求&#xff1a;查询出每月 order_amount(订单金额) 排行前3的记录。例如对于2019-02&#xff0c;查询结果中就应该是这3条&#xff1a;解决方法MySQL 5.7 和 MySQL 8.0 有不同的处理方法。1. MySQL 5.7我们先写一个查询语句。根据 order_date 中的年、月&#xff0c;…

利用jenkins的api来完成相关工作流程的自动化

[本文出自天外归云的博客园] 背景 1. 实际工作中涉及到安卓客户端方面的测试&#xff0c;外推或运营部门经常会有很多的渠道&#xff0c;而每个渠道都对应着一个app的下载包&#xff0c;这些渠道都记录在安卓项目下的一个渠道列表文件中。外推或运营部门经常会有新的渠道产生&a…

拥有成本分析:Oracle WebLogic Server与JBoss

Crimson Consulting Group 撰写的非常有趣的白皮书 &#xff0c;比较了Weblogic和JBoss之间的拥有成本 。 尽管JBoss是免费的&#xff0c;但该白皮书却严肃地宣称&#xff0c;从长远来看&#xff0c;Weblogic更便宜。 尽管此研究是由Oracle赞助的&#xff0c;但它看起来非常严肃…

mysql limit 分页 0_Mysql分页之limit用法与limit优化

Mysql limit分页语句用法与Oracle和MS SqlServer相比&#xff0c;mysql的分页方法简单的让人想哭。--语法&#xff1a;SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset--举例&#xff1a;select * from table limit 5; --返回前5行select * from table limit 0…

linux每天一小步---sed命令详解

1 命令功能 sed是一个相当强大的文件处理编辑工具&#xff0c;sed用来替换&#xff0c;删除&#xff0c;更新文件中的内容。sed以文本行为单位进行处理&#xff0c;一次处理一行内容。首先sed吧当前处理的行存储在临时的缓冲区中&#xff08;称为模式空间pattern space&#xf…

mysql trace工具_100% 展示 MySQL 语句执行的神器-Optimizer Trace

在上一篇文章《用Explain 命令分析 MySQL 的 SQL 执行》中&#xff0c;我们讲解了 Explain 命令的详细使用。但是它只能展示 SQL 语句的执行计划&#xff0c;无法展示为什么一些其他的执行计划未被选择&#xff0c;比如说明明有索引&#xff0c;但是为什么查询时未使用索引等。…

006_过滤器

过滤器 过滤器&#xff08;Filter&#xff09;把附加逻辑注入到MVC框的请求处理&#xff0c;实现了交叉关注。所谓交叉关注&#xff08;Cross-Cutting Concerns&#xff09;&#xff0c;是指可以用于整个应用程序&#xff0c;而又不适合放置在某个局部位置的功能&#xff0c;否…

Android_项目文件结构目录分析

android项目文件结构目录分析 在此我们新建了一个helloworld的项目&#xff0c;先看一些目录结构&#xff1a; 这么多的文件夹和文件中&#xff0c;我们重点关注是res目录、src目录、AndroidManifest.xml文件&#xff1a; 一、res目录主要是用来存放android项目的各种资源文件&…

实体 联系 模型mysql_数据库系统概念读书笔记――实体-联系模型_MySQL

bitsCN.com数据库系统概念读书笔记——实体-联系模型前言为了重新回顾我写的消息系统架构&#xff0c;我需要重新读一下数据库系统概念的前三章&#xff0c;这里简单的做一个笔记&#xff0c;方便自己回顾基本概念实体-联系(E-R)数据模型基于对现实世界的这样一种认识&#xff…

使用Twitter Bootstrap,WebSocket,Akka和OpenLayers玩(2.0)

原始帖子可以在ekito网站上找到。 对于我们的一位客户&#xff0c;我们需要显示一张具有实时更新的车辆位置的地图。 因此&#xff0c;我开始使用Play制作原型&#xff01; 框架及其最新发布的版本2.0&#xff0c;使用Java API。 我从Play的网络聊天室开始&#xff01; 2.0个样…