这个问题经常出现。 我的新项目也在2011年11月发布。 在这个新的Enterprise Java项目中,我将使用Java EE(JEE)代替Spring框架。

我知道:关于此主题的文章,博客和论坛讨论都可以找到。 为什么还需要一个? 因为许多博客都在谈论Java EE的旧版本,或者它们不是中立的(我希望是中立的)。 而且由于许多人仍然认为感谢EJB很繁重! 而且因为时间已经改变:现在是Java EE 6时代,J2EE已死。 最后! 最后,因为不仅可以使用JEE 6,而且还可以使用多个应用程序服务器(不只是Glassfish作为参考实现)。 我不想发动一场火焰战争(已经存在太多),我只想描述一下我对JEE与Spring“战斗”的个人看法……

因此,我认为从简短的概述和两种选择的历史入手非常重要。 然后,我将列出两者的差异,并解释为什么对于大多数新的Java项目而言,这些差异导致我使用JEE而不是Spring。 我明确地在谈论新的应用程序。 如果必须扩展现有应用程序,请继续使用现有框架!

另一个免责声明:我正在谈论关键任务企业Java应用程序。 我不是在谈论一些内部应用程序或其他不重要的内容。 我还更喜欢将Scala,Groovy和Clojure的组合持久化到NoSQL数据库,同时将其部署在JBoss OpenShift或VMware CloudFoundry等PaaS云服务中……

有关JEE和Spring的一般信息

首先,我想总结一些有关JEE和Spring的一般信息:

  • 最后,这两种选择都由几个库组成,开发人员可以使用它们来创建企业应用程序。
  • 两者都可以在大多数用例中使用,它们具有非常相似的功能(业务逻辑,事务,Web框架等等)–它们仅在实现上有所不同(例如,Spring中的声明性事务与JEE中的约定)。
  • 您也只能使用一个或某些可用库。 您甚至可以将JEE和Spring东西结合起来。
  • 通常,关键问题是:“我应该使用JEE(即,尤其是EJB,JPA,CDI等)或Spring核心框架(即,尤其是Spring Application Context,Spring Bean等)来实现我的新应用程序吗? 通常,您可以选择两者,从最终用户的角度来看都没关系。 但是您不应该将两者合并,这只会带来更高的复杂性。
  • 关于选择哪种替代方案一直存在争议。 中立地讨论这个问题非常困难。 这就是为什么几乎所有讨论都以赞美一个框架然后抨击另一个框架而结束的原因(我希望在本博文中保持中立)。

历史:J2EE太可怕了,因此Spring帮助了!

J2EE太可怕了。 如此多的XML配置,如此之多的接口以及如此la脚的应用服务器。 这就是创建Spring框架的原因。 它解决了J2EE的许多问题。 它轻巧,易于使用,并且可以将应用程序部署在Web容器(例如Tomcat)中,而不是部署在笨重的J2EE应用程序服务器中。 部署花费了几秒钟而不是15分钟。 不幸的是,JRebel当时不存在。 Spring框架不是J2EE的标准,但是它变得非常普遍,并且产生了一个庞大的社区。

JEE“偷”了轻量级的Spring创意!

一切始于一些捷径的改变。 J2EE已死。 新的快捷方式是JEE。 JEE 5诞生于2006年。它“窃取”了许多好的,轻量级的想法,例如来自Spring和其他框架的“基于配置的约定”或“依赖注入”。 是的,JEE应用服务器仍然很笨重,几乎不可能进行测试。 尽管如此,开发JEE应用程序对JEE 5还是很有趣的。创建EJB时不必编写20个接口。 哇,太神奇了!

然后,2009年发布了JEE 6。 开发是如此简单。 最后! 例如,您只需要添加一个注释,您的EJB就可以使用了! 当然,Spring框架的开发人员没有睡觉。 添加了许多新内容。 今天,您可以创建一个没有任何XML文件的Spring应用程序,就像几周前我在“ No Fluff Just Stuff”文章中所读到的一样。 此外,在Spring堆栈中添加了一些非常酷的框架,例如Spring Integration,Spring Batch或Spring Roo。
如今(2011年11月),JEE和Spring都非常普及,并拥有庞大的社区。 两者都有很多信息,例如书籍,博客,教程等。 因此,在描述了JEE和Spring的发展之后,为什么在大多数新的Java项目中使用JEE?

JEE和Spring的优缺点

必须做出决定。 在新项目中使用哪种替代方法? 让我们看看两者的利弊。 我将在Spring的优势上添加一个“ BUT”-这些“ BUT”是我更喜欢JEE而不是Spring的原因。

JEE的优势

  • JEE是一组标准规范,因此与供应商无关。 通常,规范存在几种实现。
  • 可持续性:嗯,这是几个大型公司支持的标准的优势。
  • 是的,信不信由你,测试是可能的! 轻量级的应用程序服务器和框架(例如Arquillian)进入了JEE世界!
  • 约定超越配置无处不在,而不是明确的(我知道有些人会不同意这是一个优势)。

弹簧的优点

  • 您不需要笨重的JEE应用程序服务器,可以将应用程序部署在Web容器(例如Tomcat)中。

但是:JEE应用程序服务器并不像几年前那样繁重。 此外,也可以使用JEE Web配置文件。 您不必使用Tomcat或Jetty来减轻重量!

  • Spring提供了JEE标准无法提供的功能,例如Spring Batch。

但是:您可以毫无问题地将这样的库添加到JEE项目中。 如果需要,还可以添加其他Spring库,例如JDBCTemplate或JMSTemplate(它们有助于减少一些样板代码)。

  • Spring提供了更多的灵活性和功能,例如,面向方面的编程比JEE拦截器更强大。

但是:在大多数项目中,您不需要这种灵活性或功能。 如果确实需要,请使用Spring,而不是JEE-当然!

  • 更快的发布(因为它不是标准,只有一个供应商)。 对市场需求的反应要快得多。 当前的一些示例:云,移动,社交计算。

但是:我看到的所有企业项目(包括许多不同的客户)都不那么灵活。 企业应用程序不会每月或每年更改。 如果有一个项目,可以很容易地更改版本,那么在某些情况下,Spring可能比JEE更好。 但是在大多数企业项目中,您不能简单地从Spring 2.5升级到Spring 3.x或从JEE 5升级到JEE6。我希望这是可能的,但是在拥有数千名员工的大公司中,灵活性和政治规则较低。

结论:我将在大多数新的Enterprise Java项目中使用JEE

由于我在“ BUT”部分中针对Spring进行解释的原因,我将在大多数新的Enterprise Java项目中选择JEE。 不过,有时我也会使用Spring库(例如Spring Batch)。 有时,我什至必须使用Spring(如果我需要它的灵活性或强大功能),但是只有这样,我才选择它。 当然,对于现有项目,我将继续使用已经使用的框架。 我可能不会将Spring 2.5应用程序迁移到JEE,而是将其迁移到Spring 3.x!

因此,我已经说明了为什么在大多数新的Enterprise Java项目中使用JEE的原因。 如果我错过了一些事情,或者您有其他意见(可能有很多人),则可以在评论中让我失望。 我感谢所有的“非战争”讨论……

参考: 为什么我将在 JCG合作伙伴的 2012年新的Enterprise Java项目中使用Java EE而不是Spring   关于Java EE / SOA /云计算的博客的Kai Wahner。

翻译自: https://www.javacodegeeks.com/2012/03/why-i-will-use-java-ee-instead-of.html

为什么我会在2012年的新企业Java项目中使用Java EE而不是Spring相关推荐

  1. 为什么在2012/2013年我将在新的Enterprise Java项目中继续使用Spring *和* Java EE

    自从我担任技术决策职务以来已经过去了一年多,很高兴看到我仍然与之保持着完美的和谐. 几个月前,我在KaiWähner的一个不错的博客中写了一个有关JEE与Spring的答案. 如果观点没有不同,那么讨 ...

  2. 制药企业SAP项目中CSV认证需要准备的文档

    制药企业SAP项目中CSV认证需要准备的文档 CSV,英文全称是Computerized System Validation,中文是计算机化系统验证.很多行业的企业信息化建设过程中,都要确保自己实施的 ...

  3. 通用权限管理系统组件 (GPM - General Permissions Manager) 在跨国直销企业电子商务项目中的成功应用...

    我所在是一家跨国家直销公司,在亚太某国家电子商务项目中,2011年底系统全面应用了通用权限数据访问层类库及工具类库,支持了每月万级会员加入.千万级订单:同时,在我们的项目开发过程中,完全由外包工程师来 ...

  4. 企业在项目中采用工时管理系统的好处

    在如今疫情的影响下,不少企业面对经济形势愈发严峻的情况下,对项目员工工时的管理也是越来越注重.如何在确保企业正常运转的前提下提升企业发展空间,人员降低工作成本呢?根据目前研究表明,很多企业都选择使用项 ...

  5. ios 容器类_在新的ios项目中使用的10个容器

    ios 容器类 If you start developing a new iOS app, you probably need to use several external libraries. ...

  6. IntelliJ IDEA for Mac 如何在当前的普通Java项目中创建新的模块/添加模块/创建模块

    文章目录 添加模块的入口 创建新的项目模块 添加模块的入口 添加新的模块的入口有两个,如下图所示: 第一种方式,[File] --> [New] --> [Module]: 第二种方式,打 ...

  7. Java项目:基于java+ssm企业员工考勤系统(计算机毕业设计)

    设计和开发一个企业员工考勤管理系统,企业员工和管理员只需登录系统就能实现网上考勤.建立一个能够初步实现企业考勤管理系统的智能化管理,提高考勤管理效率,企业员工能够在各个岗位上的工作状态得到及时的反馈, ...

  8. 专精特新企业具体解释和好处

    现在国家对于每个行业发展进行十四五规划,其中中小企业专精特新就是其中一个版块,但是很多人对此并不是很清楚也不了解.下面就让公司宝小编对专精特新企业是什么意思,专精特新企业有什么好处进行一定的介绍,希望 ...

  9. 深圳市专精特新企业申报条件及各区奖励政策重点介绍,补贴20-200万

    深圳市专精特新企业申报条件,市级依法在深圳市(含深汕特别合作区)登记设立两年以上,上年度营业收入1000万元以上,奖励20-50万元:省级依法在广东省内登记设立,上年度营收3000万以上,奖励20-1 ...

最新文章

  1. oppor17android版本,OPPOR17ColorOS系统怎么样
  2. python3 pycharm 断点调试 报错 greenlet.error: cannot switch to a different thread
  3. (chap4 IP协议) IPV6(IP version 6)
  4. 直播 | AAAI 2021最佳论文:比Transformer更有效的长时间序列预测
  5. cni k8s 插件安装_使用kind来快速部署k8s环境
  6. HDU1166 敌兵布阵【树状数组】
  7. Java collection 集合类架构
  8. 数据字典中的数据类型与ABAP中的中数据类型对应关系
  9. 安装Hitool JRE环境
  10. 传输rp文件到ftp服务器并通过浏览器访问html
  11. 给Intel AX200装上个Killer 1650X驱动
  12. Python连接MySQL数据库
  13. Hello, CTF WP
  14. 元数据管理-Github 1.9K Star的数据治理框架-Amundsen
  15. wps excel在线编辑java_wps excel多人在线编辑文档怎么用
  16. 盗图+php,PHP小偷程序的设计与实现方法详解
  17. for、while、do while三种循环的流程图
  18. 欧洲对撞机实现最高能级对撞 启动宇宙大爆炸实验
  19. Android手摸手实现一个画板功能(一)——View的拖拽
  20. win7/win10屏幕录制教程?--QVE屏幕录制

热门文章

  1. 托管 非托管_如何在托管的Kubernetes上备份Neo4J
  2. jmeter负载测试测试_使用Apache JMeter负载测试Web应用程序
  3. vue 混入对象_特性和混入不是面向对象的
  4. jvm内存 大于 xmx_为什么我的JVM访问的内存少于通过-Xmx指定的内存?
  5. .jdeveloper_在JDeveloper 12.1.3中为WebSocket使用Java API
  6. 成为Java流大师–第1部分:创建流
  7. netbeans6.8_NetBeans IDE 8.0和Java 8的新功能
  8. java教程java自学_15必须阅读Java 8教程
  9. 在Spring Boot中使用Vaadin的简介
  10. ug弹簧可变性装配_弹簧可配置魔术