带你走进EJB--EJB和Spring对比(转)
http://blog.csdn.net/jnqqls/article/details/17723417
通过对EJB系列的总结和学习我们已经对EJB有了基本的了解,但是为了更进一步的去深入学习EJB,我们很有必要将它拿出来跟之前非常熟悉的spring进行一下对比,通过对比来了解这两个内容的相同与不同之处,更有利于我们对两者进行深入的了解.
我们都有过这样的经历,在开发应用程序的时候,选择哪个技术是比较有学问的.在我最近的面试过程中也有很多问道关于技术选型的问题,举一个比较典型的例子比如:为什么你们的系统要选择EJB3.0而不选用Spring或者为什么选择Spring不选择EJB等.
一般而言我们会针对特定的问题会采用哪种技术能够最有效的解决它?这样的决定并不是很轻易的就能做出来的.我们需要了解各自的优势和劣势.接下来我们将会对Spring和EJB进行一系列的对比.
我们首先需要了解的一个概念是Spring是一个具体的实现,而EJB3.0是J2EE的规范,这是大的概念上的不同.但是在具体的一些地方他们两个又有着许多的共同点.例如,他们都提供把中间件服务传递到 Java 应用。如果看一下历史会更清楚明了一些,Spring 被开发出来就是为了反对 EJB ,当然,那时候的EJB2的确有着自身很多的不足,但是随着新版本的 EJB 发布, EJB3.0 究竟克服了以前版本的一些缺点,并且借鉴了Spring的相关内容.
Spring和EJB他们各自都提供了那些功能?从这个最直接的问题入手能够直观的看到他们各自的特点.Spring定义成分层的J2EE应用框架.EJB则是针对面向对象,分布式的企业级应用开发和部署组件架构.一个是框架,一个是架构.框架更多的是实现,而架构更多的是定义.
关于数据持久化
关于数据持久化这一个关键的部分,Spring和EJB3.0都对其提供了良好的支持。Spring把众多流行的持久化框架集成进来,包括JDBC、hibernate、JDO、iBatis和JPA。EJB3.0的出现将实体bean用JPA取代。JPA致力于提供一个简单的、轻量级的OR映射框架。这个规范定义了两个接口,一个用于在persistence provider间交互,另一个用于在实体和关系数据库之间建立映射。
在EJB3中通过使用@PersistenceContext注释提供的entityManager对象来获得JPA的数据访问,而在Spring中,通过对SessionFactory对象的注入获得Hibernate数据访问。我们很多人会默认为EJB使用JPA来操作数据对象,而Spring使用Hibernate来操作数据对象。但实际上,Spring同样支持使用JPA来操作数据对象,并且Spring可以通过@PersistenceContext注释来支持JPA。
关于轻量级和重量级
轻量级框架和重量级框架解决问题的侧重点是不同的。
Spring为代表的轻量级框架侧重于减小开发的复杂度,相应的它的处理能力便有所减弱(比较适用于开发中小型企业应用。采用轻量框架一方面因为尽可能的采用基于POJOs的方法进行开发,使应用不依赖于任何容器,这可以提高开发调试效率;另一方面轻量级框架多数是开源项目,开源社区提供了良好的设计和许多快速构建工具以及大量现成可供参考的开源代码,这有利于项目的快速开发。
而作为重量级框架EJB强调高可伸缩性,适合与开发大型企业应用。在EJB体系结构中,一切与基础结构服务相关的问题和底层分配问题都由应用程序容器或服务器来处理,且EJB容器通过减少数据库访问次数以及分布式处理等方式提供了专门的系统性能解决方案,能够充分解决系统性能问题。
轻量级框架的产生并非是对重量级框架的否定,甚至在某种程度上可以说二者是互补的。轻量级框架在努力发展以开发具有更强大,功能更完备的企业应用;而新的EJB规范EJB3.0则在努力简化J2EE的使用以使得EJB不仅仅是擅长处理大型企业系统,也利用开发中小型系统,这也是EJB轻量化的一种努力。对于大型企业应用以及将来可能涉及到能力扩展的中小型应用采用结合使用轻量级框架和重量级框架也不失为一种较好的解决方案。
提供商无关性
开发者选择JAVA平台的一个最重要的原因就是它的提供厂商无关性。EJB3.0是一个被设计为对提供商没有依赖性的开放的标准。EJB 3.0规范由企业JAVA社区的主流开源组织和厂商共同编写和支持的。EJB3.0框架使开发者的应用程序实现可以独立于应用服务器。
比如,JBoss的EJB3.0的实现是基于Hibernate的,Oracle的EJB3.0实现是基于TopLink的,但是,在JBoss或者Oracle上跑应用程序,开发者既不需要去学习Hibernate,也不需要学习TopLink提供的独特API。厂商无关性使EJB3.0框架区别于当前其他任何的POJO中间件框架。
很多人认为,尽管在任何应用服务器都上可以使用Spring框架,但基于Spring的应用仍然被限制于Spring本身,以及在应用中使用到的Spring提供的各种特别服务。但事实上是不是如此呢?大家应该知道,Spring的应用程序中,JtaTransactionManager使用了自动检测机制,不管是MBeans应用服务器还是Tomcat应用服务器。同理,当使用JPA时,Spring自动检测persistence.xml文件,并且创建EntityManagerFactory对象。在上面这些机制中,Spring不管是采用注释还是采用XML,都可以像EJB应用一样的与应用服务器提供商无关。
参考文章:Make the Right Decision with Our Side-by-Side Comparison of Springand EJB 3.0
带你走进EJB--EJB和Spring对比(转)的更多相关文章
- 带你走进EJB--MDB
在之前的文章中我们介绍了带你走进EJB--JMS 和 带你走进EJB--JMS编程模型 对JMS有了初步的了解, 作为EJB系列的文章我们会继续对EJB相关的内容做进一步深的学习和了解.而此次需要进行 ...
- 小丁带你走进git的世界二-工作区暂存区分支
小丁带你走进git的世界二-工作区暂存区分支 一.Git基本工作流程 1.初始化一个仓库 git init git clone git仓库分为两种情况: 第一种是在现有项目或目录下导入所有文件到 ...
- Miox带你走进动态路由的世界——51信用卡前端团队
写在前面: 有的时候再做大型项目的时候,确实会被复杂的路由逻辑所烦恼,会经常遇到权限问题,路由跳转回退逻辑问题.这几天在网上看到了51信用卡团队开源了一个Miox,可以有效的解决这些痛点,于是乎我就做 ...
- 《ASP.NET Core项目开发实战入门》带你走进ASP.NET Core开发
<ASP.NET Core项目开发实战入门>从基础到实际项目开发部署带你走进ASP.NET Core开发. ASP.NET Core项目开发实战入门是基于ASP.NET Core 3.1 ...
- 一篇文章带你掌握主流基础框架——Spring
一篇文章带你掌握主流基础框架--Spring 这篇文章中我们将会介绍Spring的框架以及本体内容,包括核心容器,注解开发,AOP以及事务等内容 那么简单说明一下Spring的必要性: Spring技 ...
- 小丁带你走进git的世界三-撤销修改
一.撤销指令 git checkout还原工作区的功能 git reset 还原暂存区的功能 git clean 还没有被添加进暂存区的文件也就是git还没有跟踪的文件可以使用这个命令清除他们 g ...
- 小丁带你走进git世界一-git简单配置
小丁带你走进git世界一-git简单配置 1.github的简单配置 配置提交代码的信息,例如是谁提交的代码之类的. git config –global user.name BattleHeaer ...
- 老司机带你走进Core Animation
为什么时隔这么久我又回来了呢? 回来圈粉. 开玩笑的,前段时间ipv6被拒啊,超级悲剧的,前后弄了好久,然后需求啊什么的又超多,所以写好的东西也没有时间整理.不过既然我现在回来了,那么这将是一个井喷的 ...
- 带你走进rsync的世界
导读 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件,也可以使用 Rsync 同步本地硬盘中的不同目录.rsync共有3种使用方 ...
随机推荐
- Codeforces Round #313 (Div. 2) 解题报告
A. Currency System in Geraldion: 题意:有n中不同面额的纸币,问用这些纸币所不能加和到的值的最小值. 思路:显然假设这些纸币的最小钱为1的话,它就能够组成随意面额. 假 ...
- 【Oracle错误集锦】:ORA-00119 & ORA-00132
有时候老天就是爱和你开玩笑,昨天好不easy配置好Oracle.可以用PL/SQL正常登录使用,今天突然就不行了.而且错误十分诡异,没有提示什么错误代码.输入usernamepassword,点击登录 ...
- Android开发之蓝牙(Bluetooth)操作(一)--扫描已经配对的蓝牙设备
版权声明:本文为博主原创文章,未经博主允许不得转载. 一. 什么是蓝牙(Bluetooth)? 1.1 BuleTooth是目前使用最广泛的无线通信协议 1.2 主要针对短距离设备通讯(10m) ...
- JWT 使用介绍
转载收藏于 http://www.cnblogs.com/zjutzz/p/5790180.html JWT是啥? JWT就是一个字符串,经过加密处理与校验处理的字符串,形式为: A.B.C A由JW ...
- 记录一下 mysql 的查询中like字段的用法
SELECT * from t_yymp_auth_role where role_name not like '%测试%' and role_name not like '%部门%' and rol ...
- OPENCV(1)
VS 程序的默认路径是源码所在路径(所以图片应该放在此处),而不是Debug路径 OpenCV 模块结构: core--定义了基本数据结构,包括最重要的Mat和一些其他的模块 imgproc--该 ...
- Firefox 浏览器添加Linux jre插件
在安装 Java 平台时,Java 插件文件将作为该安装的一部分包含在内.要在 Firefox 中使用 Java,您需要从该发行版中的插件文件手动创建符号链接指向 Firefox 预期的其中一个位置. ...
- Linux远程远程控制程序TeamViewer
TeamViewer 软件我就不介绍了,相信进行远程管理的人都知道它. 1.安装: Linux个发行版因软件管理方式不同而不同,先通过软件管理从自己的软件仓库进行搜索安装如果有就进行安装,没有通过官网 ...
- react入门安装
react的入门安装 1.react的适用方法有两种,其一是依赖在线的cdn地址: https://reactjs.org/docs/cdn-links.html 官方给的cdn地址如下 <sc ...
- LRJ入门经典-0905邮票和信封305
原题 LRJ入门经典-0905邮票和信封305 难度级别:B: 运行时间限制:1000ms: 运行空间限制:256000KB: 代码长度限制:2000000B 试题描述 假定一张信封最多贴5张邮票,如 ...