前言

在 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. 2017.10.26 JavaWeb----第五章 JavaBean技术

    JavaWeb----第五章 JavaBean技术 (1)JavaBean技术 JavaBean技术是javaweb程序的重要组成部分,是一个可重复使用的软件组件,是用Java语言编写的.遵循一定的标 ...

  2. python_3_coding

    # -*- coding:utf-8 -*- 也可以换成下划线 用于声明文件编码,python3本身就是utf-8类型,不用声明 name="你好,世界"#utf-8格式能显示汉字 ...

  3. Pj Immediate Decodability

    判断一个串是否是其他的前缀 我们需要建立一颗tire树 在插入边的时候,如果遇到一个其他串的结尾,那么就说明至少有一个串,是插入串的前缀.如果在插入完后没有新增的节点,那么插入的串就是其他串的前缀 # ...

  4. P1242 新汉诺塔(hanio)

    这道题加深了hanio的理解 如果我们要移动第n个盘子.那么就是说,n+1以后(包括n+1)的盘子都已经到位了 #include<iostream> #include<cstdio& ...

  5. office2010

    MS office2010 360网盘:http://yunpan.cn/QajXaRWbnpTzF (提取码:cf72) 如何激活参见我下面的博客: http://www.cnblogs.com/l ...

  6. 通过eclipse启动tomcat设置JAVA_OPTS失败的解决方案

    clipse中配置tomcat方法: Window-->Preference-->Server-->Runtime Environment-->add-->Apache ...

  7. JavaScript你必须掌握的8大知识点

    一:JavaScript思维导图之<基本dom操作> 二.JavaScript思维导图之<变量>的学习 三.  JavaScript思维导图之<函数基础>  四.J ...

  8. ES6初识-函数扩展

    默认值 function test(x,y='world'){ console.log('默认值'); } function test2(...arg){ for(let v of arg){ con ...

  9. Javascript简单特效及摘要

    1.js中的Element对象 ** var input1=docuemnt.getElementById("input1"); //alert(input1.value); // ...

  10. 关于 PHP 程序员技术职业生涯规划

    原文地址:http://rango.swoole.com/archives/570 看到很多 PHP 程序员职业规划的文章,都是直接上来就提 Linux.PHP.MySQL.Nginx.Redis.M ...