前言
我们将会在这里介绍Spring核心框架的体系结构,并概述每个模块的功能与实现;
Spring核心框架按照其功能可以划分为5个主要模块,为持久层,业务层到展现层都提供了支持;
其中Ioc和AOP是Spring框架所有功能实现的基础;
Test(测试)
Test模块支持使用 JUnit 和 TestNG 对 Spring 组件进行测试。Core Container(核心容器)
包括Beans,Core,Contexts 和Expression Language模块,其中Beans和Core是Spring框架的最基础部分,提供Ioc(Inverse of Control,控制反转)功能;
- Beans主要包含访问配置文件、创建和管理bean以及DI相关的一些类
- Core主要包含Spring框架的核心工具类
- Context基于Core和Beans模块之上,为Spring提供大量的扩展,提供了国际化,资源加载等
- Expression即SpringEL与JSP的EL表达式类似,可以方便的获取属性的值,属性的分配,方法的调用,访 问数组上下文等
类与类之间具有依赖关系。如果依赖关系的管理是由类自己来完成的,会导致代码的高度耦合和可测试性的降低。
所以,可以由Ioc容器对类之间的依赖关系进行管理,通过Ioc容器来完成依赖注入(接口注入,setter注入,构造器注入。而且为了防止注入异常,Ioc还提供了对特定依赖的检查),这样可以在解耦代码的同时提高代码的可测试性;
让开发者从类的实例化,依赖关系的装配等工作中解脱出来。通过配置文件或注解描述类与类之间的依赖关系,自动完成类的初始化和依赖注入。
从注入方式来看,Ioc有3种类型:构造函数注入,属性注入和接口注入;Spring Ioc支持构造函数注入和属性注入。 BeanFactory是Ioc核心接口,实现了容器的核心功能;
Context模块扩展了BeanFactory接口,添加了Bean生命周期控制,框架事件体系等功能。ApplicationContext是Context模块的核心接口;
表达式语言用于查询和管理运行期的对象,支持设置/获取对象属性,调用对象方法等。此外,还提供了逻辑表达式运算,变量定义等功能,可以方便地通过表达式串和Ioc容器进行交互。
AOP
面向切面编程,将公共部分抽取出来,为系统解耦;
- Aspects 提供了对 AspectJ 这种AOP语言级框架的集成支持;
- Instrumentation提供了 class instrumentation 支持和classloader实现,使得可以在特定应用服务器上使用;Java 5.0引入了java.lang.instrument,允许在JVM启动时启用一个代理类,通过该代理类在运行期间修改类的字节码,改变类的功能,从而实现AOP的功能;
Data Access/Integration(数据访问和集成)
- JDBC此模块包含了 Spring 对 JDBC 数据访问进行封装的所有类
- ORM 关系映射API,为JPA,Hibernate,mybatis等提供一个交互,利用ORM,可以混合的使用Spring特性进 行ORM映射
- OXM模块提供了一个对 Object/XML映射实现的抽象层
- Transactions:事务的相关操作
Spring建立了一套面向DAO层的统一的异常体系,同时将各种访问数据的检查型异常转换了非检查型异常,为整合各种持久层框架做好准备。其次,Spring通过模板化技术对各种数据访问技术进行了薄层封装,将模式化的代码隐藏起来,大大简化了代码。
这样,Spring就建立了和数据形式及访问技术无关的统一的DAO层。借助AOP技术,Spring提供了声明式事务的功能。
Web及远程操作
Web 上下文模块建立在应用程序上下文模块之上,为基于 Web的应用程序提供了上下文;该模块建立在ApplicationContext模块之上,提供了各种面向Web的工具类。WebSocket提供了一个在Web应用中高效,双向的通信;
- Web:提供了基础的面向 Web 的集成特性;
- Servlet web.servlet.jar: 该模块包含 Spring 的 model-view-controller (MVC) 实现;
- Porlet 模块: 提供了用于 Porlet 环境和 Web-Servlet 模块的 MVC 的实现;