Dawn's Blogs

分享技术 记录成长

0%

SSM学习之Spring (1) Spring简介

Spring 介绍

Spring 是一款开源 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。Spring 指的是 Spring Framework,包含很多模块,这些模块可以协助开发。如 Spring 支持 IOC 和 AOP,可以很方便地对数据库进行访问、可以很方便地集成第三方组件电子邮件,任务,调度,缓存等等)、对单元测试支持比较好、支持 RESTful Java 应用程序的开发。

Spring 最核心的思想就是不重新造轮子,开箱即用,提高开发效率。

Spring 模块

Spring 1 仅仅支持配置文件,Spring 2 开始引入注解,Spring 3 引入纯注解模式(Spring 配置类代替配置文件)。

Spring 4 的模块架构图:

Spring4.x主要模块

Spring 5 的模块架构图:

Spring5.x主要模块

Spring5.x 版本中 Web 模块的 Portlet 组件已经被废弃掉,同时增加了用于异步响应式处理的 WebFlux 组件。

从模块架构图中可以看到,Spring 的模块组织如下:

  • Core Container(核心容器):提供了对 IOC 控制反转的支持,即对象管理的支持,是 Spring 的基础模块。
  • AOP 和 Aspects:AOP 为面向切面的编程,Aspects 提供对 AOP 思想的实现。
  • Data Access/Integration:提供数据访问,数据集成的功能。
  • Web:Web 开发。
  • Test:单元测试与集成测试。

核心概念

IOC

IOC(Inversion Of Control,控制反转)是一种设计思想,就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理,被管理

  • 控制:指的是对象创建(实例化、管理)的权力。
  • 反转:控制权交给外部环境(Spring 框架中的 IOC 容器)。

IOC 的目的就是解耦,将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注入。也就是说,IOC 有两个好处:

  1. 对象之间的耦合性降低。
  2. 资源变的容易管理,由手动管理变为 Spring IOC 容器进行管理,比如可以很容易的通过 IOC 容器实现单例模式。

IOC 是一种设计思想,实现这种设计思想最合理的方式是 DI(Dependency Injection)依赖注入。程序员只需要声明对象间的依赖关系,IOC 容器自动注入依赖的对象。

IoC 图解

Bean

Bean 就是被 IOC 容器管理的对象。通过配置元数据来定义的,元数据可以通过 XML 配置文件、注解、Java Spring 配置类来声明 Bean。

AOP

面向切面编程也是一种设计思想,核心思想就是将横切关注点从核心业务逻辑中分离出来,形成一个个的切面(Aspect)。AOP中的术语:

  • 横切关注点(cross-cutting concerns) :多个类或对象中的公共行为(如日志记录、事务管理、权限控制、接口限流、接口幂等等)。
  • 切面(Aspect):对横切关注点进行封装的类,一个切面是一个类。切面可以定义多个通知,用来实现具体的功能。
  • 连接点(JoinPoint):连接点是方法调用或者方法执行时的某个特定时刻(如方法调用、异常抛出等)。
  • 通知(Advice):通知就是切面在某个连接点要执行的操作。通知有五种类型,分别是前置通知(Before)、后置通知(After)、返回通知(AfterReturning)、异常通知(AfterThrowing)和环绕通知(Around)。前四种通知都是在目标方法的前后执行,而环绕通知可以控制目标方法的执行过程。
  • 切点(Pointcut):一个切点是一个表达式,它用来匹配哪些连接点需要被切面所增强。切点可以通过注解、正则表达式、逻辑运算等方式来定义。
  • 织入(Weaving):织入是将切面和目标对象连接起来的过程,也就是将通知应用到切点匹配的连接点上。