Spring——概述

什麽是Spring?

Spring 是一个轻量级的控制反转(IoC)和面向切面(AOP)的开源容器(框架)。

优点:

  • 开源免费
  • 非侵入,轻量级
  • 对事务的支持,对框架的支持

什么是 “控制反转” “依赖注入”?

控制反转

将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。

IoC 容器是 Spring 用来实现 IoC 的载体,IoC 容器实际上就是个 Map(key,value),Map 中存放的是各种对象

依赖注入

将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注入。这样可以很大程度上简化应用的开发,把应用从复杂的依赖关系中解放出来。

整体架构

Spring——概述_2020-04-13-15-22-05.png

Core Container

Core Container(核心容器)包含有 Core、Beans、Context 和 SpEL 模块。其中 Core 和 Beans 模块是框架的基础部分,提供 IoC(控制反转)和依赖注入功能。

Core

主要包含 Spring 框架基本的核心工具类。

Beans

是所有应用都要用到的,它包含访问配置文件、创建和管理 bean 以及进行 Inversion of Control/Dependency Injection(Ioc/DI) 操作相关的所有类。

Context

构建于 Core 和 Beans 模块基础之上,提供了一种类似于 JNDI 注册器的框架式的对象访问方法。Context 模块继承了 Beans 的特性,为 Spring 核心提供了大量的扩展,添加了对国际化(如资源绑定)、事件传播、资源加载和对 Context 的透明创建的支持。

SpEL

只依赖于 Core 模块,可以单独使用。该模块提供了一个强大的表达式语言用于在运行时查询和操纵对象,该语言支持设置/获取属性的值,属性的分配,方法的调用,访问数组上下文、容器和索引器、逻辑和算术运算符、命名变量以及从 Spring 的 IoC 容器中根据名称检索对象。

Data Access/Integration

JDBC

提供了一个 JDBC 抽象层,它可以消除冗长的 JDBC 编码和解析数据库厂商特有的错误代码,这个模块包含了 Spring 对 JDBC 数据访问进行封装的所有类。

ORM

为流行的对象-关系映射 API,如 JPA、JDO、Hibernate、iBatis 等,提供了一个交互层,利用 ORM 封装包,可以混合使用所有 Spring 提供的特性进行 O/R 映射,如前边提到的简单声明性事务管理。

OXM

提供了一个 Object/XML 映射实现的抽象层,Object/XML 映射实现抽象层包括 JAXB、Castor、XMLBeans、JiBX 和 XStream。

JMS

模块主要包含了一些制造和消费消息的特性。

Transaction

支持编程和声明式事物管理,这些事务类必须实现特定的接口,并且对所有 POJO 都适用 。

Web

Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文,所以 Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

AOP

通过配置管理特性,Spring AOP 模块直接将面向切面的编程功能 , 集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理任何支持 AOP的对象。

Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖组件,就可以将声明性事务管理集成到应用程序中。

Test

Test 模块支持使用 Junit 和 TestNG 对 Spring 组件进行测试。

接口

Resource

Resource 主要负责对资源的抽象,它的每一个实现类都代表了一种资源的访问策略,如 ClasspathResource 、 URLResource ,FileSystemResource 等。

Spring 利用 ResourceLoader 来进行统一资源加载,关系图如下:

Spring——概述_2020-04-26-14-38-30.png

BeanFactory

资源加载完毕之后就需要 BeanFactory 来进行加载解析,它是一个 bean 容器,其中 BeanDefinition 是它的基本结构,它内部维护着一 个 BeanDefinition map ,并可根据 BeanDefinition 的描述进行 bean 的创建和管理。

Spring——概述_2020-04-26-14-39-03.png

BeanFacoty 有三个直接子类 ListableBeanFactory、HierarchicalBeanFactory 和 AutowireCapableBeanFactory,DefaultListableBeanFactory 为最终默认实现,它实现了所有接口。

BeanDifinition

BeanDefinition 用来描述 Spring 中的 Bean 对象。

Spring——概述_2020-04-26-14-40-39.png

BeanDefinitionReader

BeanDefinitionReader 的作用是读取 Spring 配置文件中的内容,将其转换为 IoC 容器内部的数据结构:BeanDefinition。

Spring——概述_2020-04-26-14-41-44.png

SpringApplicationContext

ApplicationContext 是个 Spring 容器,也叫做应用上下文。它继承 BeanFactory,同时也是 BeanFactory 的扩展升级版。

由于 ApplicationContext 的结构就决定了它与 BeanFactory 的不同,其主要区别有:

  1. 继承 MessageSource ,提供国际化的标准访问策略;
  2. 继承 ApplicationEventPublisher,提供强大的事件机制;
  3. 扩展 ResourceLoader,可以用来加载多个 Resource,可以灵活访问不同的资源;
  4. 对 Web 应用的支持。

Spring——概述_2020-04-26-14-43-04.png

Spring——概述_2020-04-26-14-43-17.png

文章目录
  1. 1. 什麽是Spring?
  2. 2. 什么是 “控制反转” “依赖注入”?
    1. 2.1. 控制反转
    2. 2.2. 依赖注入
  3. 3. 整体架构
    1. 3.1. Core Container
      1. 3.1.1. Core
      2. 3.1.2. Beans
      3. 3.1.3. Context
      4. 3.1.4. SpEL
    2. 3.2. Data Access/Integration
      1. 3.2.1. JDBC
      2. 3.2.2. ORM
      3. 3.2.3. OXM
      4. 3.2.4. JMS
      5. 3.2.5. Transaction
    3. 3.3. Web
    4. 3.4. AOP
    5. 3.5. Test
  4. 4. 接口
    1. 4.1. Resource
    2. 4.2. BeanFactory
    3. 4.3. BeanDifinition
    4. 4.4. BeanDefinitionReader
    5. 4.5. SpringApplicationContext
|