1. 什么是 Spring?
Spring是一个J2EE框架,这个框架提供了对轻量级IoC(Inversion of Control,控制反转)的良好支持,同时也提供了对AOP(Aspect Oriented Programming,面向切面编程)技术非常好的封装。相比其他框架,Spring框架的设计更加模块化,框架内的每个模块都能完成特定的工作,而且每个模块可以独立的运行,不会互相牵制。总结起来就是:
- Spring 是一个支持IoC和AOP的轻量级开源框架,来源于 Rod Johnson 在其著作《Expert one on one J2EE design and development》中阐述的部分理念和原型衍生而来。
- Spring 提倡以“最少侵入”的方式来管理应用中的代码,这意味着我们可以随时安装或者卸载 Spring
- 适用范围:任何 Java 应用
- Spring 的根本使命:简化 Java 开发
2. Spring 中常用术语
- 框架:是能完成一定功能的半成品。框架能够帮助我们完成的是:项目的整体架构、一些基础功能、规定了类和对象如何创建,如何协作等,当我们开发一个项目时,框架帮助我们完成了一部分功能,我们自己再完成一部分,那这个项目就完成了。
- 非侵入式设计: 从框架的角度可以理解为:无需继承框架提供的任何类这样我们在更换框架时,之前写过的代码几乎可以继续使用。
- 轻量级和重量级: 轻量级是相对于重量级而言的,轻量级一般就是非入侵性的、所依赖的东西非常少、资源占用非常少、部署简单等等,其实就是比较容易使用,而重量级正好相反。
- JavaBean: 即符合 JavaBean 规范的 Java 类
- POJO:即 Plain Old Java Objects,简单老式 Java 对象它可以包含业务逻辑或持久化逻辑,但不担当任何特殊角色且不继承或不实现任何其它Java框架的类或接口。 > 注意:bean 的各种名称——虽然 Spring 用 bean 或者 JavaBean 来表示应用组件,但并不意味着 Spring 组件必须遵循 JavaBean 规范,一个 Spring 组件可以是任意形式的 POJO。
- 容器: 在日常生活中容器就是一种盛放东西的器具,从程序设计角度看就是装对象的的对象,因为存在放入、拿出等操作,所以容器还要管理对象的生命周期。
3. 使用Spring框架的好处是什么?
- 轻量:Spring 是轻量的,基本的版本大约2MB
- 控制反转(IOC):Spring通过控制反转实现了松散耦合,对像们给出它们的依赖,而不是创建或查找依赖的对象们
- 面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开
- 容器:Spring 包含并管理应用中对象的生命周期和配置
- MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品
- 事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)
- 异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,Hibernate or JDO抛出的)转化为一致的unchecked 异常
4. Spring能帮我们做什么?
- Spring 能帮我们根据配置文件创建及组装对象之间的依赖关系。
- Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。
- Spring 能非常简单的帮我们管理数据库事务。
- Spring 还提供了与第三方数据访问框架(如Hibernate、JPA)无缝集成,而且自己也提供了一套JDBC访问模板来方便数据库访问。
- Spring 还提供与第三方Web(如Struts1/2、JSF)框架无缝集成,而且自己也提供了一套Spring MVC框架,来方便web层搭建。
- Spring 能方便的与Java EE(如Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)。
5. Spring由哪些模块组成?
Spring的模块组成架构图大致如下图所示。

Spring5 框架体系结构示意图
从上图可以看到,Spring框架主由5个模块组成,他们分别是:Spring 核心容器、Spring AOP、数据访问\集成、Web、Spring Test。下面介绍这5个部分的作用。
(1)Spring 核心容器
Spring框架的核心容器,它提供了Spring的基本功能。这个模块中最主要的一个组件是BeanFactory(IoC容器),它使用工厂模式来创建所需要的对象。同时BeanFactory使用IOC思想、通过读取XML文件的方式实例化对象,BeanFactory提供了组件生命周期的管理、组件的创建、装配、销毁等功能。 Spring 核心容器主要包含4个包:
- spring-core:依赖注入IoC与DI的最基本实现
- spring-beans:Bean工厂与bean的装配
- spring-context:扩展核心容器,提供了spring的上下文环境,给我们提供了非常有用的服务,比如:国际化、EMail、JNDI访问等。
- spring-expression:spring表达式语言SPEL
它们的依赖关系

#####(2)Spring AOP Spring AOP是对面向切面编程思想的实现,它使得Spring框架管理对象支持AOP。 Spring AOP部分包含4个包:
- spring-aop:面向切面编程
- spring-aspects:集成AspectJ
- spring-instrument:提供一些类级的工具支持和ClassLoader级的实现,用于服务器
- spring-instrument-tomcat:针对tomcat的instrument实现
它们的依赖关系

#####(3)数据访问/集成 提供了对数据访问对象模式(DAO)、JDBC、事务控制、对现有ORM框架的集成的支持等功能。
- spring-jdbc:jdbc的支持
- spring-tx:事务控制
- spring-orm:对象关系映射,集成orm框架
- spring-oxm:对象xml映射
- spring-jms:java消息服务
它们的依赖关系

(4)Web;
该层提供了创建 Web 应用程序的支持。web部分包含4个包:
- spring-web:提供了Servlet监听器的Context和Web应用的上下文。同时还集成了一些现有的Web框架。
- spring-webmvc:提供了一个构建Web应用的MVC实现。
- spring-webmvc-portlet:基于portlet的mvc实现
- spring-struts:与struts的集成,不推荐使用,spring4不再提供
它们的依赖关系

#####(5)Test Spring提供的一个类似junit的测试模块,用于测试Spring应用。test部分只有一个模块
- spring-test:spring测试,提供junit与mock测试功能
它们的依赖关系
