带你走进EJB--EJB和Spring对比

2023-05-16

      

     通过对EJB系列的总结和学习我们已经对EJB有了基本的了解,但是为了更进一步的去深入学习EJB,我们很有必要将它拿出来跟之前非常熟悉的Spring进行一下对比,通过对比来了解这两个内容的相同与不同之处,更有利于我们对两者进行深入的了解.

 

      我们都有过这样的经历,在开发应用程序的时候,选择哪个技术是比较有学问的.在我最近的面试过程中也有很多问道关于技术选型的问题,举一个比较典型的例子比如:为什么你们的系统要选择EJB3.0而不选用Spring或者为什么选择Spring不选择EJB.

 

      一般而言我们会针对特定的问题会采用哪种技术能够最有效的解决它?这样的决定并不是很轻易的就能做出来的.我们需要了解各自的优势和劣势.接下来我们将会对SpringEJB进行一系列的对比.

 

    我们首先需要了解的一个概念是Spring是一个具体的实现,EJB3.0J2EE的规范,这是大的概念上的不同.但是在具体的一些地方他们两个又有着许多的共同点.例如,他们都提供把中间件服务传递到 Java 应用。如果看一下历史会更清楚明了一些,Spring 被开发出来就是为了反对 EJB ,当然,那时候的EJB2的确有着自身很多的不足,但是随着新版本的 EJB 发布, EJB3.0 究竟克服了以前版本的一些缺点,并且借鉴了Spring的相关内容.

  

  SpringEJB他们各自都提供了那些功能?从这个最直接的问题入手能够直观的看到他们各自的特点.Spring定义成分层的J2EE应用框架.EJB则是针对面向对象,分布式的企业级应用开发和部署组件架构.一个是框架,一个是架构.框架更多的是实现,而架构更多的是定义.

  

     关于数据持久化

     

        关于数据持久化这一个关键的部分,SpringEJB3.0都对其提供了良好的支持。Spring把众多流行的持久化框架集成进来,包括JDBCHibernateJDOiBatisJPAEJB3.0的出现将实体beanJPA取代。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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

带你走进EJB--EJB和Spring对比 的相关文章

随机推荐

  • Android SO 加壳(加密)与脱壳思路

    0x01 常见的Android SO加壳 加密 思路 1 1 破坏Elf Header 将Elf32 Ehdr 中的e shoff e shnum e shstrndx e shentsize字段处理 xff0c 变为无效值 由于在链接过程
  • Android NDK中C++ STL库动态和静态链接

    0x00 本文参考 本文参考Android NDK中C 43 43 运行时库介绍 我们在开发NDK的时候 xff0c 经常需要使用C 43 43 STL库开发 xff0c 那么这些库是如何和我们的程序链接的呢 xff1f 0x01 C 43
  • 80386保护模式--GDT,LDT,TSS,调用门,特权级转移,附pmtest5代码详解

    教材选择一个操作系统的实现 xff0c 作者于渊 xff0c 看此书前最好了有汇编语言 xff0c 保护模式下的汇编 xff08 参考清华杨季文的80X86汇编语言程序设计教程 xff09 xff0c C语言 xff0c 计算机组成原理 x
  • 80386保护模式--描述符,附pm.inc代码详解

    描述符包括 xff0c 存储段描述符 xff08 代码段 xff0c 数据段 xff0c 堆栈段 xff09 xff0c 系统描述符 xff08 任务状态段TSS xff0c 局部描述符表LDT xff09 xff0c 门描述符 xff08
  • 80386保护模式--分页机制,附pmtest8代码详解

    一 分段机制 逻辑地址 分段机制 线性地址 分页机制 物理地址 xff0c 分页机制示意图如图1 页目录表中的每一项叫页目录项 xff1b 页表中的每一项叫页表项 图 1 页映射表结构 页目录表PDE xff0c 及页表PTE如图2
  • 80386保护模式--中断机制,附pmtest9代码详解

    一 80386 xff0c 内存 xff0c 8259A的连接如图1 图 1 二 编程8259A中断控制器 xff08 将ICW写入特定的寄存器 xff09 8259A是可编程中断控制器 xff0c 对它的设置并不复杂 xff0c 是通过向
  • Android--›系统源码下载之"指定模块源码的下载"(如:系统闹钟源码下载)

    网上大多数的文章都是介绍Android系统源码的下载 本文小清新 介绍Android系统中 单个模块源码的下载 其实repo下载的Android系统 就是通过下载多个小模块 然后拼起来的 简单介绍下Android源码下载方法 来自Andro
  • FAT12文件系统

    一 FAT12软盘格式 软盘格式如图1 xff1a 每个扇区是512字节 xff0c 512B 2880 61 1 44MB 图 1 软盘 xff08 1 44MB xff0c FAT12 xff09 1 引导扇区 占512字节 xff0c
  • X86/Win32函数调用规范研究

    一 函数调用总体框图如下 xff1a 二 C语言函数如下 xff1a int sum int x int y int s s 61 x 43 y return s int foo void int m 61 2 int n 61 3 int
  • ELF文件结构

    一 ELF文件结构如下图 xff1a 之所以要用ELF文件格式 xff0c 是因为这样可以用C语言和汇编语言混合写内核代码 二 ELF header及Program header详细介绍 nasm f elf o kernel o kern
  • int 13H int 10H int 15H

    一 int 13h中断 对于1 44MB的软盘来讲 xff0c 总共有两面 xff08 磁头号0和1 xff09 xff0c 每面有80个柱面 xff08 0 79 xff09 xff0c 每个柱面有18个扇区 软盘的容量的由来 xff1a
  • Orange's 进程

    解释一个操作系统的实现 chapter6 r中代码 程序流程如下 xff1a 1 把Loader中的GDT和esp挪到Kernel中 xff0c 初始化IDTPTR 2 初始化8259 xff0c 初始化IDT xff0c 初始化GDT中的
  • Orange's TTY

    一 TYY任务本质就是增加了一个进程 xff0c 并且运行在ring1 xff0c 且优先级调高了 并且设置了键盘中断用于接收键盘输入 xff0c 并将扫描码存放在缓冲区 task tyy也就是新加入的进程 xff0c 循环执行读写缓冲区
  • C语言指针强制类型转换

    一 举例说明 上图 对应函数调用为int printf const char fmt xff0c fmt为char 指针类型 xff0c 所以共占了32位字节 xff0c 但是 fmt执行的是一个字节 xff0c fmt 43 43 执行的
  • Orange's 进程间通信

    新增一个系统进程 xff0c 和TESTA进行通信 xff0c 通信的流程是这样的 xff0c 如果首先执行到系统进程 xff0c 发送消息 xff0c 那么会触发内中断到ring0级 xff0c 完成发送所需要的动作 xff0c 之后回到
  • IDEA找不到项目根路径问题【多模块情况】

    如果不对idea进行设置 则默认项目根路径是父项目根路径下 xff0c 即使父项目就是一个壳儿 从eclipse转过来又点不习惯 下面给出解决方法 在启动项找到Edit 这个配置 找到要启动的那个项目 xff0c 进行配置 解决 这时候这个
  • 使用wmic命令获得计算机硬件信息

    wmic的使用方法 wmic 硬件信息名称 get 属性名称 xff0c 属性名称2 代码示例 xff1a java获取CPU代码 public static String getCpuId throws IOException Proce
  • Kotlin--›Android Activity/Fragment转场动画极简使用方法

    Activity之间共享元素实现的转场动画 需要API gt 61 21才支持 但是 转场动画 在 support包里面提供了支持 所以没有API 21的限制 可以参考Transition转场动画的文章 https blog csdn ne
  • android日志抓取

    目录说明 00 mtk dump mtk dump文件 01 qcom dump qcom dump文件
  • 带你走进EJB--EJB和Spring对比

    通过对 EJB 系列的总结和学习我们已经对 EJB 有了基本的了解 但是为了更进一步的去深入学习 EJB 我们很有必要将它拿出来跟之前非常熟悉的 Spring 进行一下对比 通过对比来了解这两个内容的相同与不同之处 更有利于我们对两者进行深