EJB :企业级 JavaBean
POJO:plain old java object ,即普通的 java bean
(一) EJB vs Spring
EJB 即 Enterprise JavaBean, 企业级 JavaBean ,是 Sun 提供的组件模型,它为企业级的应用(服务器端)提供很多的服务,例如支持事务,安全,分布式计算等等,但其 API 过于复杂,学习成本过大,另一方面, EJB 因为要去解决很多复杂的事情而变得复杂,而很多应用并不需要去解决这些问题,例如分布式。这使得 Hibernate 和 Spring 这些轻量级框架得以应用。
这里的 EJB 主要是指 1.x 和 2.x 的版本, 3.x 的 EJB 受到 Spring 等轻量级框架的影响,现在也主要使用基于 POJO 的轻量级解决方案了。
EJB 的局限性表现在:
1) 使用 EJB ,就要引入拥有 EJB Container 的应用服务器的支持 , 例如 WebLogic , WebSphere ,这意味着高昂的授权费用。
2) EJB 有很复杂的类加载机制和部署机制,这使得 EJB 的部署和测试都很困难
实际上, EJB 是很强大的,但是因为它提供比较全面的服务,而使用者必须全盘接受,这导致一切都显得复杂,当你不需要分布式应用的时候,却要去实现分布式接口,这是一种奇怪而不必要的行为。
Spring 和 EJB 之间并不矛盾,而是,要做好一种应用,那么就要选择适合它的解决方案,一切从需求出发。
Spring 打着简化的旗号出现,它主张使用简单的 JavaBean 来实现只有 EJB 才能实现的功能,由这些 POJO 来构筑应用,为 POJO 提供各种服务,从而创造机遇 POJO 进行轻量级开发的环境。
Spring 是一个轻量级的基于 Ioc 和 AOP 的容器和框架。
(二) Spring 模块
Spring 框架提供各种服务,他们可以被划分为 7 个模块,借用一下 Spring in Action 里面的图图来说明一下吧:
这 7 个模块你不用全部使用,而是根据自己的需要来选取,每个模块可以单独存在,或者组合。
1. Core Container and Supporting Utility
核心容器,是 Spring 的基础,提供 Spring 框架的基础功能。是一个 IoC 容器的实现,勇于帮助我们以依赖注入的方式管理对象间依赖关系。另外还提供框架内部使用的各种基础工具类。
非常重要的 BeanFactory 就是在这里提供的, BeanFactory 可以说是 Spring 应用的核心,是工厂模式的一种实现,利用 Ioc 来将配置和依赖性规范从应用代码中分离。
2. Application Context Module
应用上下文模块,向 Spring 框架提供上下文信息,扩展了 BeanFactory ,添加了国际化,生命周期管理,验证等服务
3. AOP Module
AOP 模块,提供 AOP 支持,使用它,用户可以建立自己的切面。为与其他框架兼容, Spring 的 AOP 基于 Alliance 的 API
4. JDBC abstraction and the DAO module
JDBC 抽象及 DAO 模块,处理数据库相关的事情,降低代码编写数量(例如,链接或断开数据库等等),同时,使用异常层次结构,简化错误处理,而且,这个模块利用 Spring 的 AOP 模块为 Spring 应用提供事务管理服务
5. Object/relation mapping integration module
ORM 映射集成模块, Spring 没有自己的 ORM 方案,而是做了其他 ORM 框架(如, Hibernate,JDO,iBatis )的钩子程序。 Spring 的事务管理支持 JDBC 和这些 ORM 框架
6. Spring’s Web module
Web 上下文模块,建立在应用上下文之上,提供基于 Web 的上下文
7. Spring’s MVC module
MVC 模块, Spring 提供自己的 MVC 框架,且容纳了大量视图技术,其中包括 JSP 、 Velocity 、 Tiles 、 iText 和 POI