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…

使用Log4jdbc记录JDBC操作

当我们开发任何应用程序&#xff0c;完成它或结束其任何模块时&#xff0c;我们都会开始优化过程。 大多数应用程序都包含数据库访问权限&#xff0c;并且如果您使用的是ORM &#xff0c;则可能会使用hibernate 。 优化休眠持久层&#xff0c;要求准备阅读&#xff0c;理解和评…

android BluetoothAdapter蓝牙BLE扫描总结

做室内定位的程序员应该都知道&#xff0c;在Android 5.0之后&#xff0c;google推出了蓝牙扫描新接口&#xff0c;我们在实测中发现出一些问题&#xff0c;现在给大家列出&#xff0c;以供参考&#xff1a; 1.android 4.3.1(Build.VERSION_CODES.JELLY_BEAN_MR2)增加的startLe…

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

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

段落排版--对齐(text-aliagn)

想为块状元素中的文本、图片设置居中样式吗&#xff1f;可以使用text-align样式代码&#xff0c;如下代码可实现文本居中显示。(那么什么是块状元素呢&#xff1f;后面会讲到呢~) h1{text-align:center; } <h1>了不起的盖茨比</h1> 同样可以设置居左&#xff1a; h…

Java 7:在不丢失数据的情况下关闭NIO.2文件通道

关闭异步文件通道可能非常困难。 如果您将I / O任务提交到异步通道&#xff0c;则需要确保正确执行了任务。 实际上&#xff0c;出于多种原因&#xff0c;这对于异步通道可能是一个棘手的要求。 默认的通道组使用守护进程线程作为工作线程&#xff0c;这不是一个好选择&#xf…

JavaScript封装方法,兼容参数类型为Number和String

/*** 依据Kind确定跳转到目标列表页面。* param kind*/function gobackByKind(kind) {var kindStr String(kind);switch(kindStr){case "1"://跳转到客户列表页面window.location.href/biz/customer/list;break;case "2"://跳转到代理机构列表页面window.…

#获得请求来源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)字节和…

团队项目第二次冲刺Ⅶ

今天将整体代码的编码方式改了&#xff0c;作业模块基本修改完成 遇到的问题是对于添加问答模块无从下手转载于:https://www.cnblogs.com/brucekun/p/5573312.html

编写Play 2的模块,第2部分:拦截器

在本教程的第一部分中&#xff0c;我们介绍了创建&#xff0c;发布和调用模块的基本知识。 我们创建的模块并没有真正做很多事情&#xff0c;因此现在是时候使用Play的某些功能来扩展功能了。 1.拦截器 拦截器使您可以拦截对控制器的调用&#xff0c;并增强或阻止其行为。 在第…

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…

js格式化时间

Date.prototype.format function(fmt) {var o { "M" : this.getMonth()1, //月份 "d" : this.getDate(), //日 "h" : this.getHours(), //小时 "m" : this.getMinu…

PHP---函数

一.函数定义的四个要素 返回类型&#xff0c;函数名&#xff0c;参数列表&#xff0c;函数体 //1.最简单的定义方式/*function show(){ echo "hello";}show();*///2.有参数的函数定义/*function show($a){ echo $a;}show("bbbbb");*///3.有默认值的函数定义…

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;运算符用于比较表达…

数据结构0类模板的使用

类模板的使用 #include <iostream> #include <conio.h> #include <string> #define N 3 using namespace std;template <class numtype> class Swap{public :Swap(numtype a,numtype b){xa;yb;}numtype ___(){tempx;xy;ytemp;return x;}//testnumtype …

JavaScript 函数

函数 由于JavaScript的函数也是一个对象&#xff0c;所以类似function abs(v){}函数实际上是一个函数对象&#xff0c;而函数名abs可以视为指向该函数的变量。 因此&#xff0c;第二种定义函数的方式如下&#xff1a; var abs function (x) {if (x > 0) {return x;} else {…

Http Invoker的Spring Remoting支持

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