Spring整体架构

Spring子项目

Spring Framework(core)

包含一系列Ioc容器的设计,提供了依赖反转的实现,集成了AOP,还包含了MVCJDBC事务处理模块的实现。

Spring Web Flow

定义了一种特定的语言来描述工作流,同时高级的工作流控制引擎可以管理会话状态,支持AJAX来构建丰富的客户端体验,并提供JSF支持。其实际上是构建在Spring MVC的基础上的,相对于Spring Framework(core)独立发展的。

Spring BlazeDS Integration

提供SpringAdobe Flex技术集成的模块。

Spring Security

基于Spring认证安全工具

Spring Security OAuth

为OAuth在Spring上集成提供支持,OAuth是一个第三方模块,提供一个开放协议的实现,通过改协议,前端桌面应用可以对Web应用进行简单而标准的安全调用。

Spring Dynamic Modules

可以让Spring运行在OSGi平台上。

Spring Batch

提供构建批处理应用自动化操作的框架。

Spring Integration

为企业数据集成提供了各种适配器,通过这些适配器来转换各种消息格式,并帮助Spring应用完成与企业应用系统的集成。

Spring AMQP

为Spring应用更好地使用基于AMQP(高级消息队列协议)的消息服务而开发。

Spring Data

为Spring应用提供使用费关系型数据的能力。

Spring设计目标

​ 为开发者提供的是一个一站式的轻量级应用开发框架。其抽象了许多应用开发中遇到的共性问题。支持POJO和使用JavaBean的开发方式,使应用面向接口开发,充分支持OO(面向对象)的设计方法,使开发的入门测试应用部署都得到简化

​ 通过使用SpringIoC容器,可以对应用开发中复杂的对象耦合关系实现一个文本化外部化的工作,即通过一个或几个XML文件,可以方便地对应用的耦合关系进行浏览、修改和维护,很大程度上简化应用开发。通过Ioc容器实现的依赖反转,把依赖关系的管理从Java对象中解放出来,交给IoC容器来完成,从而完成了对象之间的解耦,将原来的对象—对象的关系,转化为对象—IoC容器—对象的关系。

​ Spring即作为用户和机器之间的平台,同时也为用户使用底层的机器资源提供了应用开发环境。Spring关系的是一些企业应用资源的使用,如数据持久化、数据集成、事务管理、消息中间件、Web2.0应用、分布式计算等对高效可靠处理企业数据方法的技术抽象。

​ Spring一方面通过IoC容器来管理POJO对象,以及它们相互之间的耦合关系,使企业的信息、数据、资源可以用简单得Java语言来抽象和描述;另一方面可通过AOP以动态和非侵入式的方式来增强服务的功能。

​ IoC容器和AOP模块是平台实现的核心,代表了最为基础的底层抽象,同时也是Spring其他模块实现的基础。

Spring整体架构

Spring IoC

​ 包含了最基本的IoC容器BeanFactory接口的实现,也提供了一系列这个接口的实现。如:XmlBeanFactorySimpleJndiBeanFactoryStaticListableBeanFactory等,为了让应用更方便得使用IoC容器,还在IoC容器的外围提供如Resource访问资源的抽象和定位等支持。Spring还设计了IoC容器的高级形态ApplicationContext应用上下文提供用户使用。

Spring AOP

​ Spring核心模块,围绕AOP增强功能,Spring集成了AspectJ作为AOP的一个特定实现,还在JVM动态代理/CGLIB的基础上实现了一个AOP框架。

Spring MVC

​ 以DispatcherServlet为核心的模块,实现了MVC模式,包括怎样与Web容器环境集成、Web请求的拦截、分发、处理、和ModelAndView数据的返回,以及如何集成各种UI视图展现和数据表现。

Spring JDBC/ORM

​ Spring JDBC包提供了JdbcTemplate作为模板类,封装了基本的数据库操作方法,如数据查询、更新等。

​ Spring还提供许多对ORM工具的封装。如Hibernate、iBatis等。可以把对这些工具的使用和Spring声明式事务处理结合起来。同时Spring还提供许多模板对象,如HibernateTemplate来实现对Hibernate的驱动。

Spring事务处理

​ Spring事务处理是一个通过Spring AOP实现的自身功能增强的典型模块。通过AOP增强实现了声明式事务处理的功能,使应用只需要在IoC容器中对事务属性进行配置即可完成,同时这些事务处理的基本过程和具体的事务处理器实现是无关的,应用可以选择不同的具体的事务处理机制,使用了声明式事务处理,这些具体的事务处理机制会被纳入Spring事务处理的统一框架中完成,并完成与具体业务代码的解耦。

Spring远端调用

​ 通过Spring的封装,为应用屏蔽了各种通信和调用细节的实现,通过这一层的封装,使应用可以通过选择各种不同的远端调用来实现。如HTTP调用器、第三方二进制同学实现Hessian/Burlap、RMI调用。

Spring应用场景

​ 在Spring这个一站式应用平台或框架中,其中各个模块除了依赖IoC容器和AOP之外,相互之间没有很强的耦合性;Spring最重目标是简化应用开发的编程模型。其所提供的服务可贯穿应用道整个软件中,从最上层Web UI道底层数据操作,道其他企业信息数据集成,再到各种J2EE服务的使用。

​ 可把Spring作为一个整体使用,也可以把Spring各个模块拿出来单独使用,因其本身是非常模块化的。Spring的价值:

  • 非侵入性框架,其目标是使应用程序代码对框架的依赖最小化。
  • 提供了一个一致的编程模型,使应用直接使用POJO开发,从而可以与运行环境隔离开。
  • 推动应用的设计风格向面向对象及面向接口编程转变,提高代码的重用性和可测性。
  • 改进了体系结构的选择,Spring可以帮助我们选择不同的技术实现。