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

自从我担任技术决策职务以来已经过去了一年多,很高兴看到我仍然与之保持着完美的和谐。 几个月前,我在KaiWähner的一个不错的博客中写了一个有关JEE与Spring的答案。 如果观点没有不同,那么讨论的附加值在哪里? 我确实同意Kai的许多观点。 但是,对我而言,它不是Java EE *或* Spring(如最近这篇文章中所建议的),也不是功能的问题,因为最终,功能在两种体系结构选项(及其相应的生态系统)中都进行了很好的分类。 如果缺少某些东西,那里的人已经编写了一个好的库并将其开源。 这也不是“重量重”或“重量轻”的问题。

几年后,由于向下兼容性要求,任何框架都将承担一些固定费用。 由于这些原因,本博客将不是有关Spring和Java EE的内容和原因的技术文章。 首先,我认为整个问题归结为您要在其中放置用作开发API的框架库以编写业务应用程序的问题:在服务器库目录中,或在WEB-WAR / EAR文件中INF / lib。

图2:Spring和Java EE应用程序的简化开发架构

Spring和“纯” Java EE应用程序之间最大的相关差异在于,Spring应用程序中的开发框架API是部署到任意Java运行时的Java应用程序(WAR或EAR文件)的一部分。 相反,纯Java EE应用程序仅包含业务代码,并且应用程序框架是应用程序服务器的一部分。 因此,业务应用程序直接在应用程序服务器API上工作。 除了这些纯粹的方案外,当今的大多数Java企业应用程序还使用Java EE和Spring API的混合。 几乎可以在任何不同的主题(Web服务,IoC容器,GUI等)中做出Java EE *或* Spring决策。

还有针对Java EE和Spring应用程序的纯运行时环境:兼容Java EE的服务器(Redhat JBoss,IBM WebSphere,Oracle WebLogic)和VMWare的vFabric tc Server。 因此,在一个绿色领域,人们可以选择纯Java EE应用程序体系结构而不是纯Spring应用程序体系结构。 但是,如前所述,大多数应用程序都是混合运行的。 我尚未进行过评估,但是我怀疑许多应用程序在带有Spring IoC容器的Java EE或Tomcat服务器环境中运行。 与其使用* only * Java EE或完整的Spring堆栈,不如使用成熟的Java EE和Spring API的均衡组合来实现。

Java EE的优势是各方在书面过程中建立的开放标准。 因此,尽管许多项目仅使用少量的Java EE API,但为此平台构建应用程序却非常受欢迎。 需要注意的另一个重要事实是,每个(明智的)Java打包软件供应商都支持主要的Java EE平台。 因此,许多大型企业无论如何都在内部托管Java EE服务器。 到那时,就可以在Java EE服务器上运行Spring应用程序了。 这种设置可以为生产中有数十甚至数百个Java应用程序的企业提供好处。

1 –迁移JEE服务器要容易得多,因为应用程序*直接*使用更少的服务器API。
2 –为了减少迁移成本,大多数内部客户将决定将其业务应用程序迁移到当前服务器版本。
3 – IT环境中的服务器数量减少了,生产中Java版本的数量减少了,本地开发环境的数量也减少了,更简单的ALM解决方案–总而言之:可管理的复杂性和更统一的环境。 4 –快速响应新的客户端需求:如果您需要新的(Spring)功能,则只需编译新版本的WAR / EAR文件,然后将其部署到任意Java运行时。 5 –与Java EE完整堆栈相比,潜在目标运行时环境的范围将更大。 这意味着您可能独立于“更多”平台。 6 –使用Spring,您可以在应用程序或服务器环境中增加较小的功能(避免:滚雪球效应)。 7 –与Java EE相比,完整的创新周期更快(从功能请求到生产中的使用)。 8 –根据实际的实际客户项目要求对Spring进行了增强,以确保其实际适用性。 9 –应用程序开发团队对应用程序开发堆栈负责,并可以灵活地决定哪种API可以满足客户的需求。

在纯Java EE开发堆栈中很难实现所有这些好处(其中一些解决了Java EE中的概念性问题)。 一种可能的选择是模块化JEE应用服务器体系结构。 像Java SE中一样,模块化是标准。 考虑发布过程(即JCP)也可能是有效的。

就像我之前说的,我确实相信从来没有像现在这样反对JEE,因为这两个选项在很多情况下都可以和谐地协同工作。 今天,仍然可以同时使用Spring和Java EE,就像我在其他博客文章中所解释的那样。 我相信过去的重要讨论更多地是针对我们的业务应用程序的编程模型:CDI与Spring IoC以及JSF与Spring MVC。 辩论通常也是关于是否喜欢“ EJB”的情感辩论(出于历史原因)。 此外,您的业务应用程序与基础平台(服务器,操作系统,硬件)的“真实”独立性有很多。 例如:我们使用EJB作为集成技术,但是业务应用程序对此一无所知。 平台独立性的关键不是使用Java EE还是使用Spring,而是:合理地决定在业务应用程序编程模型中直接使用哪些API。 有时最好不要使用一些application-server-lib-directory派生的目录。

参考:为什么我会在2012/2013年继续通过我们的JCG合作伙伴 Niklas在新的Enterprise Java项目中使用Spring *和* Java EE。


翻译自: https://www.javacodegeeks.com/2012/05/why-i-will-continue-to-use-spring-and.html

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

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

相关文章

linux ubuntu 五笔输入法,ubuntu下安装fcitx五笔输入法

安装fcitx输入法sudo add-apt-repository ppa:fcitx-team/stable #添加安装源,apt-get 添加,nightly源也可以sudo apt-get update #更新源,否则无法安装fcit…

浅谈Windows下SVN在Android Studio中的配置、基本使用及解除关联

看到网上很多关于svn环境配置和关联Android-Studio的很多博文,发现很零散,想集大家所长整理一下: 在AndroidStudio中开发版本控制中,除了Git就是SVN,和Eclipse不同Android Studio没有提供单独的插件,只能和…

四. 基于环视Camera的BEV感知算法-BEVDepth

目录 前言0. 简述1. 算法动机&开创性思路2. 主体结构3. 损失函数4. 性能对比总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》,链接。记录下个人学习笔记,仅供自己参考 本次课程我们来学习下课程第四章——基于环视Cam…

【腾讯Bugly干货分享】Android Patch 方案与持续交付

本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57a31921ac3a1fb613dd40f3 Android 不仅系统版本众多,机型众多,而且各个市场都各有各的政策和审核速度&#xff0…

App Engine中的Google Services身份验证,第1部分

这篇文章将说明如何构建一个简单的Google App Engine(GAE)Java应用程序,该应用程序可针对Google进行身份验证,并利用Google的OAuth授权访问Google的API服务(例如Google Docs)。 此外,在Google已…

c语言中空格的作用是什么,C语言中空格和\0的区别

\0 为字符串结束符,比如说:abcd (空格)cdefg;存入数组时,空格作为一个字符占有一个字节的空间,我们可以把它看着一个字符去处理。而“\0 ” 则是这个字符串的结束标识符,也占有一个字节的空间,表…

C++11 新特性:Lambda 表达式

参考文章:https://blogs.oracle.com/pcarlini/entry/c_1x_tidbits_lambda_expressions 或许,Lambda 表达式算得上是 C 11 新增特性中最激动人心的一个。这个全新的特性听起来很深奥,但却是很多其他语言早已提供(比如 C#&#xff0…

山东自考c语言程序设计停考了吗,2018山东自考停考专业有哪些

自考每年都会停考一批的专业以适应社会的发展,今年山东自考的停考专业有哪些?本文由学梯网小编整理发布,仅供参考。2018年山东自考停考专业有什么根据山东省教育考试院发布的《关于山东自学考试停考国际贸易(专科)等19个专业的通知》知悉&…

公开调用私有Java方法?

我们是Java开发人员,在Java中已知4种访问修饰符:私有,受保护,公共和包。 好吧,除了私有外,最后三个可以通过继承,相同的包或实例从类外部调用。 现在,常见的问题是,可以公…

Java 异常处理 try catch finally throws throw 的使用和解读(一)

最近的一个内部表决系统开发过程中,发现对异常处理还存在一些模棱两可的地方,所以想着整理一下主要涉及到:1.try catch finally throws throw 的使用和解读2.自定义异常的使用3.常见的运行异常 /** * Java 异常处理 * try catch finally thr…

C语言字符像素,返回字符串宽度 (以像素为单位)

[c]代码库#include #include #include #include int main(void){/* request auto detection */int gdriver DETECT, gmode, errorcode;int x 0, y 0;int i;char msg[80];/* initialize graphics and local variables */initgraph(&gdriver, &gmode, "");/…

Spring动态物业管理

静态和动态属性对于运营管理以及在生产级别更改系统行为都非常重要。 特别地,动态参数减少了服务中断。 本文展示了如何使用Quartz在Spring Applications中管理动态属性。 有关使用 Spring和Quartz集成提供“ 使用Spring和Quartz的多作业计划服务”的文章。 让我们看…

[BZOJ1005][HNOI2008]明明的烦恼

[BZOJ1005][HNOI2008]明明的烦恼 试题描述 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间连线,可产生多少棵度数满足要求的树? 输入 第一行为N(0 < N < 1000),接下来N行,第i1行给出第i个节点的度数Di,如…

android调用so封装jni,GitHub - Michelle0716/AndroidJniDemo1: 安卓对c进行so文件打包,并以jni的形式进行调用...

AndroidJniDemo1安卓对c进行so文件打包&#xff0c;并以jni的形式进行调用项目中的部分app &#xff1a; 编译so文件jniDemo: 添加运行so文件开发环境&#xff1a;android studio 3.0.1(As3.0以上创建项目&#xff0c;选择支持c/c,项目会自动生成需要的配置&#xff0c;不需要在…

ADF任务流:页面片段的托管bean范围

介绍 当我们使用ADF任务流并需要实现一些特定于流的业务逻辑或存储一些与该流相关的信息时&#xff0c;我们通常使用pageFlowScope托管bean。 而且&#xff0c;当我们需要为流的活动&#xff08;页面或页面片段&#xff09;提供服务时&#xff0c;我们将较短的作用域用于此类托…

Linux平台下:块设备、裸设备、ASMlib、Udev相关关系

对磁盘设备&#xff08;裸分区&#xff09;的访问方式分为两种&#xff1a;1.字符方式访问&#xff08;裸设备&#xff09;&#xff1b;2.块方式访问 Solaris平台 : 在Solaris平台下&#xff0c;系统同时提供对磁盘设备的字符、块方式访问。每个磁盘有两个设备文件名: 一个在/d…

Error0---local variable S is accessed from within inner class; needs to be declared final

local variable S is accessed from within inner class; needs to be declared final在内部类当中不能引用本地变量s,需要被声明为常量转载于:https://www.cnblogs.com/Cherrylalala/p/6636642.html

android版本如何修改时间,如何修改Android系统默认时间

相信很多人看到过Android手机或平板显示XXXX-01-01这个奇怪的日期&#xff0c;没错&#xff0c;这就是Android设备的默认日期。当Android设备没有联网&#xff0c;无法获取当前真实时间的时候&#xff0c;就会使用系统默认时间。大部分时候&#xff0c;系统默认时间是Epoch时间…

Java Web应用程序的反跨站点脚本(XSS)过滤器

这是为Java Web应用程序编写的一个好简单的反跨站点脚本&#xff08;XSS&#xff09;过滤器。 它的主要作用是从请求参数中删除所有可疑字符串&#xff0c;然后将其返回给应用程序。 这是我以前关于该主题的帖子的改进。 您应该将其配置为链&#xff08;web.xml&#xff09;中的…

生成建表脚本up_CreateTable

已经很久没用使用这个脚本了&#xff0c;今天用到&#xff0c;并做修改&#xff0c;增加了生成扩展属性功能。 Go if object_ID([up_CreateTable]) is not nullDrop Procedure [up_CreateTable] Go /* 生成建表脚本(V4.0) Andy 2017-3-28 */ Create Proc up_CreateTable (obje…