今天TSS和InfoQ都转了一篇Spring与EJB3的读后感,我就看了下,标题和介绍满吸引人的。内容嘛其实有点不过瘾,但是先记录下来吧。
http://www.devx.com/Java/Article/32314/0/page/1总的来看Spring+Hibernate与JPA很相似,它们都是基于pojo的持久化。
Hibernate Session和JPA Entity Manager基本上等价,但是要记住他们的两个重要区别。Hibernate session是一个实体缓存也是一个ORM引擎的接口。而JPA中这两个概念是分开的。Persistence context作为缓存而entity manager则作为ORM引擎的接口。
当然还有显而易见的区别,Spring+Hibernate偏向使用XML配置映射,而JPA偏向使用Annotation,虽然两者都有XML和注释两种实现。
还有,JPA是一个标准,而Spring是对不同实现的抽象,两者的方向是不同的。JPA的方式更彻底,Java传统中都是这样的。
JPA的主要商业实现有Hibernate、Kodo、Toplink,被巨鳄们看好。
后面,说到了关于Cache和Transaction管理的问题,由于Spring的草根特性,为了兼容实现,它使用Tread local这种编程式的方式。而EJB 3.0则由容器自动完成这些过程。而且EJB 3.0提供了不同的persistence context范畴,可以比较方便的管理持久数据的生命周期。不过,这个观点很难说,因为如果你把Spring也看成一种容器,那么这Thread local对于你来说也是透明的,可以认为差不多。
关于EJB 3.0对生命周期的规定,让持久化的概念更清楚了,如果这些东西能够通过声明而不是编码来实现应该是惬意的,可是,问题就是很多程序员一般就喜欢自己控制,不喜欢那么透明,所以EJB一直以来兴建的这些漂亮模型总是只有少数人使用,不是么?
在事务方面,由于两者都支持生命性事务,所以程序本身看起来基本一样。
区别在于配置。Spring还是偏向XML,并且事务作为Spring对AOP应用的经典样例,transaction完全作为附加语义,可以通过配置替换各种事务实现,从JDBC、Hibernate到JTA,显然这是从编程者角度考虑的,门槛很低。
而EJB 3.0则只支持JTA,这就需要容器的支持,当然跨多资源的事务往往是企业级项目的特性,所以这种思路可以理解。而且现在也有很多开源的JTA实现了,它们完全可以让你的应用在商业EJB容器外运行。还要提一点,EJB3默认是配置上事务的,需要声明才可覆盖,这说明了EJB3对于企业应用的态度。
在JTA事务可以通过声明就以横切关注点的形势注入的时候,JTA的成本已经下降了,所以一开始就用这种API完全可行。
这篇文章中关于状态的地方我有点不太理解,里面说Spring的prototype等价于EJB的SFSBs,实现stateful。
EJB 3.0在这方面无疑是强大的,因为本身在这方面它就是个容器规范,Java EE容器都会提供这种高级的生命周期管理,并且把生命周期作为变成模型中非常重要的一部分。所以结果就是EJB 3.0在这方面领先于Spring,声名简单,并且从实现的方式上来说,EJB 3.0在性能上和可伸缩性上有明显的优势。Spring在性能伸缩或者说分布部署的时候应该说是捉襟见肘的,Terracotta也许可以解决些,但还……
应该说,实际上Spring提供的prototype就是new的另外一种实现,只不过它会经过Spring装配,所以它叫做prototype,也就是“原型”,Spring每次回new出一个新的,按你的要求。当然,由于是类似new,所以Spring通过代理的方式管理起生命周期,也就能模拟出session、request、global session的statefull,不过这些功能显然不算强项,在Spring 2.0中加强了(以前只有singleton和prototype),但依然不支持事务范畴,这就明显不如EJB 3.0了。但是,回想Spring的编程哲学,它不要解决这种问题,这种问题留给容器解决:D
文章最后的总结比较官腔,基本上就是在说Spring灵活,EJB 3.0强大简单,它们各有优缺点,所以应该结合起来使用,具体大家可以看看原文。
分享到:
相关推荐
### Spring与EJB3.0的关键区别及其优劣分析 #### 一、Spring框架概述 **1.1 引言** Spring作为一个广受欢迎的开源框架,最初被设计用于减轻企业级应用开发中的复杂性问题。它的一个显著特点在于模块化的分层架构...
Spring 和 EJB3 是两种在企业级 Java 应用开发中广泛使用的框架。Spring 框架以其轻量级、模块化和灵活的设计而闻名,而 EJB3(Enterprise JavaBeans 3)则是 Java EE(现在称为Jakarta EE)平台的一部分,提供了...
Spring 集成 EJB(Enterprise JavaBeans)是将轻量级的 Spring 框架与企业级的 EJB 3.x 技术相结合的一种方式,以实现更灵活且高效的企业应用开发。Spring 提供了一个丰富的IoC(Inversion of Control,控制反转)和...
标题 "spring with ejb3" 暗示了我们即将探讨的是如何在Spring框架中集成和使用EJB 3(Enterprise JavaBeans 3)技术。EJB 3是Java EE平台的一部分,它提供了用于构建企业级应用的服务和组件模型。Spring则是一个轻...
#### 四、Spring与EJB的关键差异 ##### 4.1 XML配置 vs 注解 Spring 早期主要依赖于XML配置文件来定义和管理bean之间的依赖关系。这种方式虽然提供了强大的配置能力,但对于简单的应用场景而言,显得较为繁琐。...
Struts2、Spring和EJB3是Java Web开发中的三个重要框架,它们分别在MVC模式、依赖注入和企业级服务方面发挥着关键作用。这个压缩包提供的源代码是一个完整的项目示例,展示了如何将这三个框架集成到一个应用程序中。...
EJB3的轻量化设计使其更容易与其他框架集成,如Spring。 **Struts + Spring + EJB3整合** 将这三个框架整合在一起,可以构建出强大的企业级应用。Spring可以通过其AOP功能管理EJB3的事务,同时作为Struts的替代品或...
3. **Spring与ejb的协作**:在某些场景下,会话bean可能只负责协调工作,而具体的业务逻辑由Spring的bean来执行。这种方式可以将 ejb 的强健性与 Spring 的易用性结合在一起。 **CommonEjbProj项目概述** ...
在本文中,我们将探讨如何将三个流行的Java EE框架——Struts2、EJB3和Spring——集成在一起,形成一个强大的企业级应用。这个整合过程对于初学者来说可能会有些复杂,但通过逐步指导,我们将简化这一过程。我们使用...
【EJB3.0与Spring比较】 EJB3.0和Spring是两种广泛使用的Java企业级应用程序开发框架,它们在很多方面有所不同,这些差异主要体现在以下几个关键点: 1. **厂商无关性(Vendor Independence)** - EJB3.0遵循开放...
在IT行业中,Hibernate、Spring、EJB(Enterprise JavaBeans)和Ajax是四个非常重要的技术,它们各自在软件开发的不同方面发挥着关键作用。下面将分别详细介绍这些技术,并探讨它们之间的协同工作方式。 **...
【ejb3+spring+struts实现简单银行系统】 在Java开发领域,EJB(Enterprise JavaBeans)3、Spring框架和Struts框架是常见的企业级应用开发技术,它们结合使用可以构建高效、可扩展的Web应用程序,特别是对于复杂的...
Spring 还支持多种持久层技术,如 JDBC、Hibernate 和 JPA,并且可以与其他Java EE组件如EJB集成。 【EJB】 EJB(Enterprise JavaBeans)是Java EE平台的核心组件之一,用于构建可部署的、分布式的企业级应用程序。...
本培训主要围绕三个核心话题展开:Structs、Spring和EJB(Enterprise JavaBeans),这些都是Java开发中的重要组成部分。 首先,让我们深入了解Structs。Structs是一个基于MVC(Model-View-Controller)设计模式的轻...
在IT行业中,Spring、Struts和EJB是三个非常重要的框架,它们分别专注于不同领域的...Spring与EJB的整合可以让开发者选择合适的方式来实现服务层,比如使用Spring的DAO或Service层,或者使用EJB的会话Bean。 在"jbos
该标题与描述指出了一篇关于POJO(Plain Old Java Object)应用框架的文章,主要对比了Spring框架与EJB 3.0(Enterprise JavaBeans 3.0)。文章旨在深入探讨这两种框架在企业级Java应用程序开发中的应用,以及它们...
Struts2、Spring和EJB(Struts2+Spring+EJB,简称SSE)是Java企业级开发中常用的三大框架,它们各自承担着不同的职责,共同构建了一个强大的应用架构。Struts2作为MVC(Model-View-Controller)框架,负责处理用户...
8. **持续集成与测试**:整合后的系统需要配合自动化测试工具,如JUnit和Mockito,确保各个层次的正确性。持续集成工具,如Jenkins或GitLab CI/CD,可以确保代码质量并加速开发流程。 总之,Struts、Spring和EJB ...