目录
(一)Data Access/Integration(数据访问/集成)
(三)Core Container(Spring 的核心容器)
(四)AOP、Aspects、Instrumentation 、Messaging和Test 模块
一、广义与狭义的spring
在不同的语境中,Spring 所代表的含义是不同的。我们可以使用“广义”和“狭义”两个角度进行理解。
广义上的 Spring 泛指以 Spring Framework 为核心的 Spring 技术栈。
狭义的 Spring 特指 Spring Framework,通常我们将它称为 Spring 框架。
二、广义的spring
项目名称 | 描述 |
spring Data | Spring提供的数据访问模块,对JDBC和ORM提供了很好的支持,通过它,开发人员可以使用一种相对统一的方式,来访问位于不同类型数据库中的数据。 |
Spring Batch | 一款专门针对企业级系统中的日常批处理任务的轻量级框架,能够帮助开发人员方便的开发出健壮、高效的批处理应用程序。 |
Spring Security | 前身为Acegi,是Spring中较成熟的子模块之一,它是一款可以定制化的身份验证和访问控制框架。 |
Spring Mobile | 是对Spring MVC的扩展,用来简化移动端Web应用的开发。 |
Spring Boot | 是Spring团队提供的全新框架,它为Spring以及第三方库一些开箱即用的配置,可以简化Spring应用的搭建及开发过程。 |
Spring Cloud | 一款基于Spring Boot实现的微服务框架,它并不是某一门技术,而是一系列微服务解决方案或框架的有序集合。它将市面上成熟的、经过验证的微服务框架整合起来,并通过 Spring Boot 的思想进行再封装,屏蔽调其中复杂的配置和实现原理,最终为开发人员提供了一套简单易懂、易部署和易维护的分布式系统开发工具包。 |
三、狭义的Spring
核心 | 描述 |
IOC | lnverse of Control 的简写,译为“控制反转”,指把创建对象过程交给 Spring 进行管理 |
AOP | Aspect Oriented Programming 的简写, 译为“面向切面编程”。 AOP用来封装多个类的公共行为,将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,减少系统的重复代码,降低模块间的耦合度。另外,AOP还解决一些系统层面上的问题,比如日志、事务、权限等。 |
四、Spring Framework 的特点
1.方便解耦,简化开发
Spring 就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给 Spring 管理。
2.方便集成各种优秀框架
Spring 不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如 Struts2、Hibernate、MyBatis 等)的直接支持。
3.降低 Java EE API 的使用难度
Spring 对 Java EE 开发中非常难用的一些 API(JDBC、JavaMail、远程调用等)都提供了封装,使这些 API 应用的难度大大降低。
4.方便程序的测试
Spring 支持 JUnit4,可以通过注解方便地测试 Spring 程序。
5.AOP 编程的支持
Spring 提供面向切面编程,可以方便地实现对程序进行权限拦截和运行监控等功能。
6.声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无须手动编程。
五、主要模块
(一)Data Access/Integration(数据访问/集成)
数据访问/集成层包括 JDBC、ORM、OXM、JMS 和 Transactions 模块,具体介绍如下。
(二)Web 模块
Spring 的 Web 层包括 Web、Servlet、WebSocket 和 Portlet 组件,具体介绍如下。
(三)Core Container(Spring 的核心容器)
Spring 的核心容器是其他模块建立的基础,由 Beans 模块、Core 核心模块、Context 上下文模块和 SpEL 表达式语言模块组成,没有这些核心容器,也不可能有 AOP、Web 等上层的功能。具体介绍如下。
(四)AOP、Aspects、Instrumentation 、Messaging和Test 模块
在 Core Container 之上是 AOP、Aspects 等模块,具体介绍如下:
Instrumentation 模块:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。
六、IoC
IoC 是 Inversion of Control 的简写,译为“控制反转”,它不是一门技术,而是一种设计思想,是一个重要的面向对象编程法则,能够指导我们如何设计出松耦合、更优良的程序。
Spring 通过 IoC 容器来管理所有 Java 对象的实例化和初始化,控制对象与对象之间的依赖关系。我们将由 IoC 容器管理的 Java 对象称为 Spring Bean,它与使用关键字 new 创建的 Java 对象没有任何区别。
IoC 容器是 Spring 框架中最重要的核心组件之一,它贯穿了 Spring 从诞生到成长的整个过程。
IoC控制反转
在传统的 Java 应用中,一个类想要调用另一个类中的属性或方法,通常会先在其代码中通过 new Object() 的方式将后者的对象创建出来,然后才能实现属性或方法的调用。为了方便理解和描述,我们可以将前者称为“调用者”,将后者称为“被调用者”。也就是说,调用者掌握着被调用者对象创建的控制权。
在 Spring 应用中,Java 对象创建的控制权是掌握在 IoC 容器手里的,其大致步骤如下。
IoC 带来的最大改变不是代码层面的,而是从思想层面上发生了“主从换位”的改变。原本调用者是主动的一方,它想要使用什么资源就会主动出击,自己创建;但在 Spring 应用中,IoC 容器掌握着主动权,调用者则变成了被动的一方,被动的等待 IoC 容器创建它所需要的对象(Bean)。
这个过程在职责层面发生了控制权的反转,把原本调用者通过代码实现的对象的创建,反转给 IoC 容器来帮忙实现,因此我们将这个过程称为 Spring 的“控制反转”。