EJB是使用J2EE平台各项服务的一种方式,但不是唯一的方式。对于分布式系统来说,是用EJB在某些方面确实可以带给我们很大的收益,但并不是所有的J2EE应用都要用于分布式环境。(其实即便是在分布式环境下,EJB也不见得是最优的解决方案)。
使用EJB,通常意味着需要引入拥有EJB Container的应用服务器(J2EE Application Server)的支持;
使用EJB使得应用程序的部署和测试都更加困难,负责的类加载机制、负责的部署描述符、过长的开发部署周期等;
只有在分布式的场景中,EJB才会带给我们最大的益处。
基于EJB的应用开发实践并非一无是处。尽管其本身在合适的场景下也或多或少地存在一些问题,但不分场景地滥用它,才会导致基于EJB的应用开发声名狼藉。
没有任何一种解决方案是普遍使用的,只有适用于特定场景的解决方案。
Spring并不是要替代EJB,而是给出EJB之外的另外一种方案而已,甚至于二者可以是互补的。
Spring框架为构筑应用的POJO提供了各种服务,进而创造了一套适用于POJO进行轻量级开发的环境。
不管Spring框架经过多少次版本更迭,起本质始终不变,都是为了提供各种服务,以帮助我们简化基于POJO的Java应用的开发。
组成整个Spring框架的各种服务实现被划分到了多个相互独立却又相互依赖的模块当中。
整个Spring框架构建在Core核心模块之上,它是整个框架的基础。在该模块中,Spring为我们提供了一个IoC容器(IoC Container)实现,用于帮助我们以依赖注入的方式管理对象之间的依赖关系。
Spring的AOP模块,提供了一个轻便但功能强大的AOP框架,让我们可以以AOP的形式增强各POJO的能力,进而补足OOP/OOSD之缺憾。Spring的AOP框架符合AOP Alliance规范,采用Proxy模式构建,与Ioc容器相结合,可以充分显示出Spring AOP的强大威力。
Spring框架中事务管理抽象层是Spring AOP的最佳实践,它直接构建在Spring AOP的基础之上,为我们提供了编程式事务和声明式事务管理的完备支持。
Spring框架为我们提供了针对Java EE服务(JNDI、JMS以及JavaMail等)的集成服务。
Spring框架提供了一套自己的Web MVC框架,同时Spring MVC框架并不排斥其他的Web框架,Spring的Web框架都为Struts、WebWork以及JSF等提供了集成支持。
不要将Spring看作是一个IoC容器,也不要只讲Spring与AOP挂钩,Spring提供的远比这些东西要多得多。Spring不仅仅是一个简化Java EE开发的轻量级框架,它更应该是一个简化任何Java应用的开发框架。