开发人员对Spring vs JavaEE的看法

在Java社区中,Spring vs JavaEE是一个永无止境的争论。 在这样的辩论中,人们组成一个团体,由两个传播者,建筑师和一个平台的核心粉丝组成,并且不断进行辩论。 参与辩论的人可能是负责平台选择的架构师。 但是开发人员会如何看待这次Spring vs JavaEE辩论?

我是同时使用Spring和JavaEE的Java开发人员,并且不属于Spring或JavaEE粉丝俱乐部。 在这里,我想就这个史诗般的Spring vs JavaEE辩论分享自己的想法。

1.商业(有时是政治)方面

在许多组织中,技术选择可能并不完全取决于开发人员的选择。 更具体地说,如果您在所谓的巨型企业组织中工作,那么很有可能会有架构团队来决定在项目中使用哪种平台/语言/框架/库。

除此之外,大型企业在选择技术平台时还考虑以下方面:

  • 平台/语言/框架/库的成熟度
  • 商业支持
  • 许可费用等

作为开发人员,我几乎不能影响上述任何方面的决策过程,尤其是当我是离岸开发中心的开发人员时。 所以我不用太担心这些事情。

2.如果您真的很擅长Spring / JavaEE,那么学习另一门也不难

当有人说我是JavaEE专家但我听不懂Spring时,我总是感到惊讶。 JavaEE和Spring都在相同的核心API(Servlet,JPA,JMS,BeanValidation等)上工作,不同之处在于谁将Spring或AppServer粘合在一起。

即使对于诸如依赖注入(Spring DI,CDI),REST(JAX-RS,SpringMVC)等事物有一些不同的API,它们的外观和行为也非常相似。

也许有人可以说CDI比Spring DI更安全。 在以下情况下,Spring和CDI的行为不一样吗?

  • 如果只有一个Spring / CDI Bean,则使用@Autowired或@Inject进行注入可以正常工作
  • 当有多个Spring或CDI bean实现时,注入失败,并抛出错误:“找到了多个可以注入的合格bean”,注入失败。
  • 使用@Produces或@Bean注释方法将自定义对象提供为Bean提供程序

只要它们的行为类似,我不在乎它们是以类型安全的方式实现还是在其内部实现中使用基于String的映射。

怎样才能成为Spring的专家,却不懂JavaEE,反之亦然? Spring专家学习JavaEE需要花费多少时间?

3.对“ Average Joe开发人员”更友好

我认为,到目前为止,许多人应该已经意识到,一项技术的成功可能并不完全取决于其优点,还取决于开发人员的采用。 要实现的最重要的事情是“并非每个软件开发人员都是摇滚明星开发人员。 与热情的技术忍者相比,普通的joe开发者更多”。 因此,为了使人们适应任何框架,应该对“ Average Joe Developer”友好。

我认为Spring通过提供更多工具(如SpringBoot,用户指南等)在做得很好。SpringSecurity,Spring Integration,Spring XD,Spring Social很好地满足了现代业务需求。 还请考虑一下Spring提供的各种模板,这些模板使操作变得简单而无需担心样板代码。

通过引入JBossForge,Wildfly Swarm等快速入门,JavaEE也表现出色。 我遇到了一些基于JavaEE的框架,例如Picketlink,它满足了安全性要求,但是我觉得它比应该的要复杂得多。

我要传达的观点是“您可以使用Spring进行JavaEE中的几乎所有工作”。 区别在于,这让普通的joe开发人员可以立即使用。

4.没有上下文的La脚论点

每当Spring vs JavaEE辩论出现时,人们就会组成两个小组,并进行无休止的辩论。 不幸的是,辩论集中在一些无用或过时的观点上。

XML重:

JavaEE爱好者首先开始说Spring是XML的重头戏,我讨厌XML等等。 如果您仍在使用早于2.5版的Spring并假设它仍然基于XML,那么我的朋友应该醒来,并转到http://spring.io

EJB不好(或)JSF不好

Spring迷们像EJB 2.x或JSF 1.x一样猛扑EJB和JSF。 如果他们真的关注EJB 3.x和JSF 2.x,那么他们根本不会争论。 不要凭您6年的EJB2.x经验来判断EJB3.x。

重或轻

我对“重量”的解释是基于运行时的足迹。 据我所知,当您将托管bean部署到JavaEE容器中时,容器将代理它并注入所有企业服务(事务,安全性等),如果是Spring,它将由Spring AOP完成。

我没有任何度量标准可以说哪个是比较重的Container Proxy或SpringAOP Proxy,但是我想可能没有太大的区别。

有些人将战争档案的大小视为其“重量”。 在这种情况下,将(JavaEE AppServer + war)的大小与(带有126个jars的SpringApp)进行比较,看看哪一个重量轻:-)

JavaEE是基于标准的

拜托了伙计们!!!!

供应商锁定

我认为选择一个不会让您坚持某个特定供应商的平台是好的。 但是,仅基于迁移到其他实现的能力来选择选项是不正确的。 一年中从一台服务器切换到另一台服务器多少次? 选择一个不会与供应商锁定您的平台是“很不错的选择”,但这并不是选择平台的主要因素。

我们不需要外部库

这称为“为争辩而争辩”。 向我展示任何没有依赖关系的真实应用程序。 如果您说我要开发自己的日志记录库,我要编写自己的HTTP客户端,我要开发自己的通用工具,那么您需要寻找一些没有“重新发明”的懒惰的架构师/开发人员。所有轮子的疾病。

5.不要看着人群说“你们都是白痴,因为您使用X,所以应该迁移到Y”。

这是我在许多社区站点(尤其是Reddit站点)上观察到的常见模式。 只需发布与JavaEE vs Spring相关的任何内容,就会有两个小组像其他一样抨击另一个小组,因为另一个小组没有使用他们喜欢的平台。

想一分钟。 如果说Spring不好,为什么会有很多人使用它并喜欢它。 如果JavaEE不好,为什么会有很多人从Spring切换到JavaEE。 每个平台上都有很多好东西。 尊重他人选择他们选择的任何选项。 如果可能的话,请问他们为什么选择彼此的理由,并了解您是否错过了任何事情。

只是说“你们都是不使用我喜欢的选项的白痴”并不能使他们使用您喜欢的技术。 实际上,这触发了人们的想法,提出了您最喜欢的平台烂点的清单。

如果您确实希望他们切换到自己喜欢的平台,请通过代码示例显示原因。 向他们展示使用您喜欢的平台和示例应用程序开发应用程序有多么容易。 写更多有关常见问题及其解决方法的文章。 将“ Average Joe Developer”安装到您喜欢的平台上。

作为一个热情的Java开发人员,我阅读了Spring vs JavaEE的讨论,希望可能有一些我不知道的事情,例如“在哪个领域比另一个领域更好”。 但是我发现70%的讨论都是关于la脚的争论,这对我来说不是很有趣。

我希望Spring和JavaEE阵营之间的战斗越来越多,并使他们的平台比其他平台更好。 归根结底,无论谁赢得了辩论,最终开发人员都将拥有更强大的平台。

翻译自: https://www.javacodegeeks.com/2015/06/a-developers-perspective-on-spring-vs-javaee.html

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

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

相关文章

使自定义控件居中于父容器的计算公式

frm.Top (this.panelListView.Height - frm.Height) / 2; frm.Left (this.panelListView.Width - frm.Width) / 2; 设置两个值,top和left,公式:用父容器的长宽减去自定义控件的长宽然后除以二。转载于:https://www.cnblogs.com/llcdbk/p/46…

查看linux电脑总内存,如何查看Linux系统中的内存使用情况的命令呢?

有些命令可用于检查Linux系统中的内存使用情况。这是一些更好的命令。有很多工具可以查看Linux系统中的内存使用情况。一些命令被广泛使用,例如free和ps。其他命令允许以多种方式显示系统的性能统计信息,例如top。在本文中,我们将介绍一些命令…

如何玩转CSS的Id 和 Class选择器?

目录 id 和 class 选择器 id 选择器 class 选择器 id 和 class 选择器 如果你要在HTML元素中设置CSS样式,你需要在元素中设置”id” 和 “class”选择器。 id 选择器 id 选择器可以为标有特定 id 的 HTML 元素指定特定的样式。 HTML元素以id属性来设置id选择器,CSS 中 id…

【工具使用】Xray与Burp联动--流量转发插件Passive Scan Client

Burp被动扫描流量转发插件:Passive Scan Client 0x01 插件编译 插件地址:https://github.com/c0ny1/passive-scan-client rootkali:~# git clone https://github.com/c0ny1/passive-scan-client.git rootkali:~# cd passive-scan-client/ rootkali:~/passive-scan…

linux 用mutex定义一个linkedlist,【基于LINUX的操作系统实验教程最终版材料】

(基于LINUX的操作系统实验教程)(最终版)《基于LINUX的操作系统实验教程.doc》由会员分享,可免费在线阅读全文,更多与《(基于LINUX的操作系统实验教程)(最终版)》相关文档资源请在帮帮文库(www.woc88.com)数亿文档库存里搜索。1、b;*Waitonthe…

怎么玩转CSS内部样式表与外部样式表?

CSS 创建 当读到一个样式表时,浏览器会根据它来格式化 HTML 文档。 如何插入样式表 插入样式表的方法有三种: 外部样式表(External style sheet)内部样式表(Internal style sheet)内联样式(Inline style)外部样式表 当样式需要应用于很多页面时,外部样式表将是理想的选择。…

服务器硬件监控转载:

转载:http://nolinux.blog.51cto.com/4824967/1664664 前一周上架服务器,本来准备把针对服务器的硬件监控这一部分总结下成文,结果过个端午给过忘了。。。今天就又整理了下,在这里分享给51博友,也算是对自己前段工作的…

java 分析java死锁_有益的CountDownLatch和棘手的Java死锁

java 分析java死锁您是否曾经使用过java.util.concurrent.CountDownLatch ? 这是在两个或多个线程之间实现同步的非常方便的类,在该类中,一个或多个线程可以等待,直到在其他线程中执行的一组操作完成为止(请参阅javado…

验证码识别Burp reCAPTCHA插件使用

介绍 Burp的reCAPTCHA也可用来识别验证码,github地址:https://github.com/bit4woo/reCAPTCHA,下载相应的jar包添加到burp中,位置在extender-extensions-add下,添加成功后burp模块栏会多出reCAPTCHA一栏,如下…

linux下的五种io模型,Linux下的五种IO模型

Java中提供的IO有关的API,在文件处理的时候,其实依赖操作系统层面的IO操作实现的(关于Java对IO的三种封装,可见我的另一篇博客)开门见山,Linux下的如中IO模型:阻塞IO模型,非阻塞IO模型,IO复用模…

怎么样才能玩转前端所有的CSS背景相关问题?

目录 背景颜色 背景图像 背景图像 - 水平或垂直平铺 背景图像- 设置定位与不平铺 背景- 简写属性 CSS 背景属性 CSS 背景 CSS 背景属性用于定义HTML元素的背景。 CSS 属性定义背景效果: background-

如何使用Eclipse调试Maven构建

当运行带有许多插件(例如jOOQ或Flyway插件 )的Maven构建时,您可能想更深入地了解这些插件或这些插件的扩展内部发生了什么。 当您从命令行运行Maven时,这可能并不明显,例如通过: C:\Users\jOOQ\workspace&…

PropertyGrid 控件使用方法

编写一个对象,后面传递给 PropertyGrid 来显示: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; namespace WindowsForms_PropertyGrid {public class UserPropertyClass{privat…

BurpSuite插件 -- Struts2-RCE

​好遗憾,明明不想失去,却又无能为力,说真的,那种想放弃又想爱的滋味,真折磨人。。。。 ---- 网易云热评 一、插件介绍 一个用于检查struts2 RCE漏洞的Burp扩展器 二、下载地址(插件作者:prakh…

c语言移位运算的作用,C语言的移位操作符使用方法

位移位运算符是将数据看成二进制数,对其进行向左或向右移动若干位的运算。位移位运算符分为左移和右移两种,均为双目运算符。第一运算对象是移位对象,第二个运算对象是所移的二进制位数。以下是小编为大家搜索整理的C语言的移位操作符使用方法…

一文精通CSS文本问题,你值得一看

目录 CSS 文本格式 文本颜色 文本的对齐方式 文本修饰 文本转换 文本缩进 CSS文本属性 CSS 文本格式 下面是文本的演示

[算法导论]练习16.1-4 活动教室分配(区间着色问题)

转载请注明原创:http://www.cnblogs.com/StartoverX/p/4608412.html 题目: 有一组活动,我们需要将它们安排到一些教室,任意活动都可以在任意教室进行。我们希望使用最少的教室完成所有活动。 设计一个高效的贪心算法求每个活动应该…

c语言选择菜单程序设计,c语言课程设计报告-- 使用菜单选择趣味程序.doc

c语言课程设计报告-- 使用菜单选择趣味程序青岛农业大学课程设计报告题 目: 使用菜单选择趣味程序姓 名: 杨丽娜学 院: 理学与信息科学学院专 业: 通信工程班 级: 2班学 号:指导教师:年月日目 录…

各种服务常用端口号

常见的数据库,默认端口号是多少: 一、关系型数据库 1、MySql数据库 ,默认端口是: 3306; 2、Oracle数据库 ,默认端口号为:1521; 3、Sql Server数据库 ,默认端口号为:1433&#xff…

jboss配置ejb容器_JBoss AS 7 EJB3池配置

jboss配置ejb容器现在已经发布了AS 7.0.1,下面让我们看看有哪些新的EJB3功能可用。 就像我在上一篇文章中提到的那样 ,AS 7.0.1现在允许您为无状态会话bean和MDB配置池。 当前,我们允许在子系统级别配置池,这意味着该池将适用于服…