Spring 介绍
Spring 是一款开源 Java 开发框架,旨在提高开发人员的开发效率以及系统的可维护性。Spring 指的是 Spring Framework,包含很多模块,这些模块可以协助开发。如 Spring 支持 IOC 和 AOP,可以很方便地对数据库进行访问、可以很方便地集成第三方组件电子邮件,任务,调度,缓存等等)、对单元测试支持比较好、支持 RESTful Java 应用程序的开发。
Spring 最核心的思想就是不重新造轮子,开箱即用,提高开发效率。
Spring 模块
Spring 1 仅仅支持配置文件,Spring 2 开始引入注解,Spring 3 引入纯注解模式(Spring 配置类代替配置文件)。
Spring 4 的模块架构图:
Spring 5 的模块架构图:
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 有两个好处:
- 对象之间的耦合性降低。
- 资源变的容易管理,由手动管理变为 Spring IOC 容器进行管理,比如可以很容易的通过 IOC 容器实现单例模式。
IOC 是一种设计思想,实现这种设计思想最合理的方式是 DI(Dependency Injection)依赖注入。程序员只需要声明对象间的依赖关系,IOC 容器自动注入依赖的对象。
Bean
Bean 就是被 IOC 容器管理的对象。通过配置元数据来定义的,元数据可以通过 XML 配置文件、注解、Java Spring 配置类来声明 Bean。
AOP
面向切面编程也是一种设计思想,核心思想就是将横切关注点从核心业务逻辑中分离出来,形成一个个的切面(Aspect)。AOP中的术语:
- 横切关注点(cross-cutting concerns) :多个类或对象中的公共行为(如日志记录、事务管理、权限控制、接口限流、接口幂等等)。
- 切面(Aspect):对横切关注点进行封装的类,一个切面是一个类。切面可以定义多个通知,用来实现具体的功能。
- 连接点(JoinPoint):连接点是方法调用或者方法执行时的某个特定时刻(如方法调用、异常抛出等)。
- 通知(Advice):通知就是切面在某个连接点要执行的操作。通知有五种类型,分别是前置通知(Before)、后置通知(After)、返回通知(AfterReturning)、异常通知(AfterThrowing)和环绕通知(Around)。前四种通知都是在目标方法的前后执行,而环绕通知可以控制目标方法的执行过程。
- 切点(Pointcut):一个切点是一个表达式,它用来匹配哪些连接点需要被切面所增强。切点可以通过注解、正则表达式、逻辑运算等方式来定义。
- 织入(Weaving):织入是将切面和目标对象连接起来的过程,也就是将通知应用到切点匹配的连接点上。