EJB vs. Spring

2025年5月5日 | 阅读 3 分钟

EJBSpring 都是能够提供中间件解决方案的技术。但是它们的发展理念不同。两者都提供类似的功能范围,但代码看起来相同。在本节中,我们将讨论 EJB 和 Spring 之间的区别

EJB

EJBEnterprise JavaBeans 的缩写。它是一个 Java API,用于分布式和组件化编程。它定义了 Bean 的格式。它概述了 Bean 运行所在容器提供的一组服务。因此,开发人员无需担心安全、事务支持等服务。运行 EJB 应用程序需要应用程序服务器(如 JBoss、WebLogic 等)。虽然 Spring 框架可以与任何应用程序服务器一起使用。Spring 应用程序被锁定在 Spring 本身以及您选择集成到 Spring 框架中的特定服务中。

EJB vs. Spring

Spring

Spring 是一个开源的、轻量级的框架。它提供了许多功能,如 IOC、事务管理、JDBC 异常处理等。它具有分层架构,允许我们在开始开发时选择必要的组件。它还支持 Hibernate、JSF、EJB 等其他框架。Spring 框架强制开发人员将重点放在业务需求上,而不是应用程序的架构细节上。

Spring 框架的设计是将其置于应用程序服务器和服务库之上。而在 EJB 3.0 中,该框架集成到应用程序服务器中,并且服务集成代码被封装在接口之后。因此,它可以通过在应用程序服务器级别工作来优化性能和开发人员体验。例如,它们可以将 JPA 引擎与 JTA 事务管理紧密结合。因此,EJB 并非完美,因为它仍然缺少一些功能,例如注入非托管组件,如简单的 POJO。

EJB 和 Spring 的区别

EJBSpring 的关键区别在于,EJB 是 Java EE 的规范,而 Spring 是一个框架或实现。另一个关键区别是,Spring 不支持事务上下文在远程调用之间的传播,而 EJB 则支持。

EJB 专为事务和组件编程而设计。它用于开发服务器端应用程序。而 Spring 提供基础设施配置,让开发人员专注于业务需求。

序号比较基础EJBSpring
1事务管理它仅支持 JTA 事务管理器。它支持多种事务,如 JTA、Hibernate、JDO 和 JDBC。
2依赖注入它可以注入 List、属性、Map 和 JNDI 资源。它可以将 EJB 的数据、JMS 和 JPA 资源注入到容器中。
3持久化它支持编程式 Bean 管理的持久化,并与 JPA 紧密集成。它提供了一个支持集成各种持久化技术的框架,如 JDBC、Hibernate、JDO 和 iBATIS。
4状态管理它支持有状态会话 Bean 和扩展持久化上下文。支持 Web 容器会话管理。
5Web 服务提供对 JAX-WS 2.0 的支持。它不支持任何直接的 Web 服务集成。
6分布式计算它提供了一个管理远程方法调用的容器。它还支持通过 RMI、Web 服务和 JAX-RPC 进行远程方法调用。
7消息传递它通过消息 Bean 提供开箱即用的消息传递功能。如果处理消息传递,则会添加监听器配置。
8调度可以通过 EJB Timer 服务实现简单的调度。对于调度,必须添加和配置 Quartz。
9AOP通过拦截器提供有限的支持。它支持 AspectJ 和 Spring AOP 联盟。
10安全性可以通过 JAAS 实现声明式和命令式安全。它不提供任何开箱即用的安全实现。我们可以使用 Acegi 框架来实现。
11聚类大多数容器都内置支持。提供复杂的第三方解决方案。

如何选择?

如果我们想开发一个有很多配置并且由容器级别控制的应用程序,我们应该选择 Spring。如果我们不想花费太多时间在配置上,并且应用程序有预定义的技朮栈,我们可以使用 EJB

Spring 能取代 EJB 吗?

Spring 从一开始就被开发为 EJB 的替代品。EJB 的所有组件都已集成到 Spring 中。因此,我们可以使用 Spring 代替 EJB。Spring 鼓励良好的面向对象设计实践。使用 Spring 的优点是我们还可以轻松切换到其他 DI 框架,如 Guice。