Spring vs. EJB 3.0
Spring框架是一个开源项目,并不是一个标准的东西。Spring自己定义了一套XML配置文件大纲以及程序接口,从长远考虑,有很大的不确定 性。Spring的主要开发者来自Interface21公司(这是帮我非常敬重的人),Interface21靠相关咨询和服务维持,作为一个商业团体 其利益取向将可以完全左右Spring未来的方向。相比EJB 3出身名门正派的标准血统并有众多主流商业厂商支持,Spring的非标准性将可能带来极大的风险。 Spring框架本身不带持久实现,但它支持JDBC, Hibernate, JDO和 iBatis等持久化框架。Spring通过使用不同的DAO和Helper类以利用JDBC、Hibernate、iBatis或JDO,所以并没有实 现和最终服务提供者的隔离。简单来说,就是需要重构代码才能实现持久化框架的更换。EJB 3.0的持久集成在应用服务中,通过JPA,可以在底层更换持久实现,如将Hibernate更换为Toplink。EJB 3.0的持久具有更大的灵活性,并有利于厂商进行性能优化和扩展。 Spring和EJB3.0都为企业应用提供运行时服务,(如:事务、安全、日志消息、配置服务)。由于这些服务都不是直接与应用的业务逻辑相关 联,所以都不是由应用来自行管理。EJB3.0使用Java注释来配置声明式服务,Spring使用XML配置文件。在大多数情况下,EJB3.0的注释 声明显得更为简单和优雅。Spring使用XML来定义属性并配置声明式服务的结果将是一个冗长而不稳定的配置文件。
依赖注入模式(DI)是在应用中实现松散耦合的最佳实践。Spring和EJB3.0都支持DI模式,但他们有着深刻的不同。Spring支持通用 的(但复杂的)基于XML配置文件的依赖注入API。EJB3.0支持注入大多数服务对象(如EJB和上下文对象)和通过简单注释声明的JNDI对象。 EJB 3.0完全支持集群。部署在服务集群中的EJB3.0应用将自动获得负载均衡、分布缓存、状态复制等功能。底层的集群服务隐藏在EJB3.0编程接口后面,屏蔽了所有的复杂性。Spring没有简单的利用集群的方法。 Hibernate vs. EJB 3.0 Hibernate与EJB 3.0其实并没有很好的可比性,因Hibernate仅关注ORM,而EJB 3.0更多则更多表现为一种组件框架,其中包含ORM部分而已。EJB 3.0在设计过程中,曾经得益于Hibernate的作者Gavin King,据说EJB 3.0 EntityBean的设计理念完全来自于Hibernate。只需用将EJB 3.0 EntityBean API调用转换为Hibernate API,Hibernate就可以成为EJB 3.0中EntityBean的Implementation。 当开源framework已经成为习惯性势力,并给人们带来众多乐趣或疲惫感的时候,Java EE 5的出现会是适逢其时吗?无论如何,是继续选择开源还是拥抱Java EE 5?相信今天这并不是个容易的选择,或许,随着更多的厂商发布支持Java EE 5的产品,提供更好的工具支持,这个答案才会明朗起来。 |