Spring 技术内幕:Spring 设计理念和整体架构
Spring 的各个子项目
了解即可,对了解 Spring 生态有所帮助
- Spring Framework(Core): Spring 项目核心,包含 IOC 容器设计,提供依赖反转模式实现,AOP 功能,还包含其他 Spring 的基本模块
- Spring Security: 广泛使用基于 Spring 的认证和安全工具
- Spring Security OAuth: OAuth 提供一个开放式的协议,通过协议前端桌面应用可以对 Web 应用进行简单而标准的安全调用
- Spring Web Flow: 建立在 SpringMVC 上的流程引擎
- Spring BlazeDS Intergration: 提供 Spring 与 Adobe Flex 技术集成的模块
- Spring Dynamic Modules: 可以让 Spring 运行在 OSGi 平台上。
- Spring Batch: 提供构建批处理应用和自动化操作的框架
- Spring Intergration: 体现了“企业集成模式”的具体实现
- Spring AMQP: 提供基于 AMQP 的消息服务而开发的
- Spring .NET: 在 .NET 中使用 Spring 的 IOC 容器
- Spring Android: 为 Android 终端开发提供 Spring 支持
- Spring Mobile: 基于 Spring MVC 构建,为特定的移动终端提供定制
- Spring Social: Spring 框架的扩展,帮助 Spring 应用更好的使用 SNS
- Spring Data: 为 Spring 应用提供使用非关系型数据的能力
Spring 的设计目标
Spring 为开发者提供的是一个一站式的轻量级应用开发框架。
设计理念: 在 Java EE 应用的开发中,支持 POJO 和使用 JavaBean 的开发方式,使应用面向接口开发,充分支持 OO(面向对象)的设计方法。
IOC 容器的优点:
- 通过一个或几个 XML 文件,我们就可以方便的对应用对象的耦合关系进行流程、修改和维护,因此可以很大程度上简化应用开发。
- 通过 IOC 容器实现的依赖反转,把依赖关系的管理从 Java 对象中解放出来,交给 IOC 容器来完成,从而完成了对象之间关系的解耦。
AOP 的优点: 可以通过 AOP,以动态和非侵入式的方式来增强业务功能。
AOP 的实现方式:
- AspectJ 框架(静态代理)
- 直接使用 JVM 动态代理 Proxy 的实现(JDK 动态代理)
- CGLIB 动态代理
Spring 的整体架构
- Spring IOC: 包含最为基本的 Ioc 容器 BeanFactory 的接口与实现,同时还设计了 IOC 容器的高级形态 ApplicationContext 应用上下文供用户使用。
- Spring AOP: Spring 集成了 AspectJ 作为 AOP 的一个特定实现,同时还在 JVM 动态代理/CGLIB 的基础上实现了一个 AOP 框架,作为 Spring 集成其他模块的工具,比如:TransactionProxyFactoryBean 的声明式事务就是通过 AOP 集成的。
- Spring MVC: 以 DispatcherServlet 为核心,实现了 MVC 模式,包括 Web 容器环境的集成,Web 请求的拦截、分发、处理和 ModelAndView 数据的返回。
- Spring JDBC/Spring ORM: Spring 对 JDBC 做了一层封装,使通过 JDBC 完成的对数据库的操作更加简洁。Spring 还提供了许多对 ORM 工具的封装。
- Spring 事务处理: Spring 事务处理是一个通过 Spring AOP 实现自身功能增强的典型模块。在这个模块可以看到一个通用的实现声明式事务处理的基本过程,还可以看到具体的事务处理器是怎样封装不同的事务处理机制的。(总结:快去看源码)
- Spring 远程调用: Spring 应用带来的一个好处就是能够将应用解耦,一方面降低设计的复杂性,另一方面可以解耦以后将应用模块分布式的部署,从而提高系统整体的性能。后一种情况下,需要用到 Spring 的远程调用,通过Spring 的封装,为应用屏蔽了各种通信和调用的细节的实现,同时通过这层封装,使应用可以选择不同的远程调用来实现。
- Spring 应用: 这部分的应用支持,往往来自一些使用非常广泛的 Spring 子项目,或者该子项目本身就可以看成是一个独立的 Spring 应用。通过这个模块的支持,使 Spring 应用可以便利和简洁地容纳第三方的技术实现,不但丰富了 Spring 应用的功能,而且丰富了整个 Spring 生态圈,使 Spring 应用得越来越广泛。
Spring 的优点
- Sprng 是一个非侵入性的框架,其目标是使应用程序代码对框架的依赖最小化,应用代码可以在没有 Spring 或者其他容器的情况下运行。
- Spring 提供了一个一致的编程模型,使应用直接使用 POJO 开发,从而可以与运行环境隔离开来。
- Spring 推动应用的设计风格向面向对象及接口编程转变,提高了代码的重用性和可测试性。
- Spring 改进了体系结构的选择,给我们提供了技术实现切换的可能性,比如 Struts 切换到 Spring MVC(通常情况下都不会这么做)。Spring 至少为我们提供了这种可能性和选择,降低了平台锁定的风险。