前言

在 Spring Boot 出现之前,开发一个 Spring 项目总会需要添加很多依赖。但是我们在配置依赖的时候,往往不太明确各依赖的具体作用,经常是从网上复制粘贴。

为何需要添加这些依赖?各依赖之间有何关系?某个依赖是否可以省略?要回答这些问题,就有必要了解 Spring 的依赖体系。

搞清了这些问题后,下次配置依赖时,就能很清楚的知道自己需要添加哪些依赖了。

Spring Framwork Modules

这里仅针对 Spring 4 和 Spring 5

Spring 框架被分解成 20 个左右的模块,这些模块又按功能分成多个类别:

Core Container

核心容器由 spring-core, spring-beans, spring-context, spring-context-support, 和 spring-expression 组成



spring-core 和 spring-beans

spring-core 和 spring-beans 是 Spring 的基石,提供了基本的 DI (依赖注入)功能。

但是我们基本不需要添加这两个依赖,因为我们通常都会使用更上层的模块,而这些上层模块依赖了它们,我们引入上层模块后,依赖管理工具会自动链入下层依赖。

spring-expression

spring-expression 定义了强大的 Spring 表达式语言,用于在运行时查询和操作对象。

spring-context 和 spring-context-support

spring-context 建立在 core 和 beans 之上,提供了更高层的 API。其核心是 ApplicationContext。

spring-context-support 则是为将第三方库整合进 Spring 应用上下文 提供支持。

普通的 Spring 应用只需要引入 spring-context 模块:

// gradle
implementation group: 'org.springframework', name: 'spring-context', version: '5.0.7.RELEASE'

从上面的依赖关系图就能知道,四个核心模块都是它的依赖。

AOP 和 Instrumentation

这一部分包含下列模块:spring-aop, spring-aspects, spring-instrument, spring-instrument-tomcat

  1. spring-aop 提供了面向切面编程的实现,它允许你定义拦截器 (interceptors) 和 切点 (pointcuts),用以解耦(decouple) 关注点不同的代码。
  2. spring-aspects 整合了 Java 最强大的一个 AOP 库:AspectJ.
  3. spring-instrument 提供了用于某些应用程序服务器的类工具支持和类加载器实现.
  4. spring-instrument-tomcat 是 Spring’s instrumentation agent for Tomcat.

其他的见参考。。懒啊

参考

Spring 笔记(二)模块体系的更多相关文章

  1. spring笔记(二)

    共性问题: 1. 服务器启动报错,什么原因? * jar包缺少.jar包冲突 1) 先检查项目中是否缺少jar包引用 2) 服务器: 检查jar包有没有发布到服务器下: 用户库jar包,需要手动发布到 ...

  2. Spring笔记(二)Core层

    Spring用一种非入侵的方式来管理程序,模块结构图如下:   .Core层 IOC(控制反转):应用本身程序不负责依赖对象的创建及维护,依赖对象的创建及维护有外设容器负责,即:IOC: DI(依赖注 ...

  3. spring笔记二

    DI—Dependency Injection,即“依赖注入”:组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中.依赖注入的目的并非为软件系统带来更多功能,而是 ...

  4. Spring笔记(10) - 日志体系

    一.概况 在项目开发当中,日志对于我们开发或运维人员来说,是一个必不可少的工具.在线下我们可以通过 debug 来查找排除问题,但对于线上系统来说,我们只能通过日志分析来查找问题,我们可以通过日志打印 ...

  5. mysql学习笔记二 —— 权限体系

    要点: 1.MySQL的API2.MySQL的相关文件3.MySQL的权限体系 1.MySQL的API 应用程序接口 (application program interface) 1.1 命令行中的 ...

  6. Spring初学笔记(二):Bean的注入

    关于Bean的注入 在上一篇中,已经说到虽然注入确实可以降低类与类之间的耦合,但并没有解决调用者必须知道类的创建方法的问题,也可以说是没有实现调用者与类实现的解耦,我们也提到,为了实现两者的解耦,可以 ...

  7. Spring笔记01_下载_概述_监听器

    目录 Spring笔记01 1.Spring介绍 1.1 Spring概述 1.2 Spring好处 1.3 Spring结构体系 1.4 在项目中的架构 1.5 程序的耦合和解耦 2. Spring ...

  8. 《CMake实践》笔记二:INSTALL/CMAKE_INSTALL_PREFIX

    <CMake实践>笔记一:PROJECT/MESSAGE/ADD_EXECUTABLE <CMake实践>笔记二:INSTALL/CMAKE_INSTALL_PREFIX &l ...

  9. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework中的spring web MVC模块

    spring framework中的spring web MVC模块 1.概述 spring web mvc是spring框架中的一个模块 spring web mvc实现了web的MVC架构模式,可 ...

  10. Mastering Web Application Development with AngularJS 读书笔记(二)

    第一章笔记 (二) 一.scopes的层级和事件系统(the eventing system) 在层级中管理的scopes可以被用做事件总线.AngularJS 允许我们去传播已经命名的事件用一种有效 ...

随机推荐

  1. Django Reverse for 'artic_post' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: []

    Reverse for 'home' with arguments '()' and keyword arguments '{}' not found. 0 pattern(s) tried: [] ...

  2. Java日志框架介绍

    一.序言 日志为系统的必不可少的一部分,通过输出的日志我们可以排查线上出现的各种问题,就像断案的线索一样.我们还可以通过日志数据分析用户的行为习惯做大数据分析. 二.日志框架分类及其历史 框架的种类: ...

  3. Mysql url参数浅析

    驱动包用的是mysql-connector-java-8.0.11.jar 新版的驱动类改成了com.mysql.cj.jdbc.Driver //北京时间东八区 serverTimezone=GMT ...

  4. Mantle--国外程序员最常用的iOS模型&字典转换框架

    Mantle简介 Mantle是iOS和Mac平台下基于Objective-C编写的一个简单高效的模型层框架. Mantle能做什么 Mantle可以轻松把JSON数据.字典(Dictionary)和 ...

  5. UVA_1434_YAPTCHA

    The math department has been having problems lately. Due to immense amount of unsolicited automated ...

  6. MySQL备份工具percona-xtrabackup安装

    1.安装xtrabackup的yum源 rpm -ivh https://www.percona.com/redir/downloads/percona-release/redhat/latest/p ...

  7. python核心编程2 第八章 练习

    8–2. 循环. 编写一个程序, 让用户输入三个数字: (f)rom, (t)o, 和 (i)ncrement . 以 i为步长, 从 f 计数到 t , 包括 f 和 t . 例如, 如果输入的是 ...

  8. Element-ui组件--pagination分页

    一般写后台系统都会有很多的列表,有列表就相应的要用到分页,根据项目中写的几个分页写一下我对分页的理解,就当是学习笔记了. 这是Element-ui提供的完整的例子 <template>  ...

  9. 使用windows api安装windows服务程序(C#)

    3个步骤: 1.安装器代码编写 2.安装器工具类编写 1)安装.启动服务) 2)卸载服务 3.windows服务程序编写(参考:多线程.方便扩展的Windows服务程序框架) 4.代码下载,在文末(注 ...

  10. python pycharm2018开启debug模式

    为什么需要开启DEBUG模式1.如果开启了DEBUG模式,那么在代码中如果抛出了异常,在浏览器的页面中可以看到具体的错误信息,以及具体的错误代码位置,方便开发者调试.2.如果开启DEBUG模式,那么以 ...