SpringBoot SpringBoot 原理篇 1 自动配置 1.17 自动配置原理【3】

news2024/11/29 22:40:24

SpringBoot

【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】

SpringBoot 原理篇

文章目录

      • SpringBoot
      • SpringBoot 原理篇
      • 1 自动配置
        • 1.17 自动配置原理【3】
          • 1.17.1 看源码了
          • 1.17.2 小结

1 自动配置

1.17 自动配置原理【3】

1.17.1 看源码了

【笔者用的2.7.4 ,感觉和老师的2.5.4 都已经差别很大了】

换个版本

在这里插入图片描述

在这里插入图片描述

OK, 前面我们已经说到

它在这个文件中默认加载了很多的自动配置的功能

在这里插入图片描述

比如说这儿的第一个就是它默认要加载的一个项

找出来看看这个配置的代码

在这里插入图片描述

现在在我们猫和老鼠的案例中 ,加入redis

没加之前的运行效果

package com.dingjiaxiong;

import com.dingjiaxiong.bean.CartoonCatAndMouse;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.*;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.Import;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Indexed;

/**
 * ClassName: App
 * date: 2022/10/25 13:03
 *
 * @author DingJiaxiong
 */

@SpringBootApplication

//@SpringBootConfiguration
//        @Configuration
//                @Component
//        @Indexed
//@EnableAutoConfiguration
//        @AutoConfigurationPackage
//                @Import({AutoConfigurationPackages.Registrar.class})
//        @Import({AutoConfigurationImportSelector.class})
//@ComponentScan(excludeFilters = {
//                @ComponentScan.Filter(type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class}),
//                @ComponentScan.Filter(type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class}
//        )}

//@Import({AutoConfigurationPackages.Registrar.class})
//@Import({AutoConfigurationImportSelector.class})


@Import(CartoonCatAndMouse.class)
public class App {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(App.class);

        String[] names = context.getBeanDefinitionNames();
        for (String name : names) {
            System.out.println(name);
        }

        CartoonCatAndMouse bean = context.getBean(CartoonCatAndMouse.class);
        bean.play();
    }

}

运行结果

在这里插入图片描述

这一堆bean ,是没有redis的,现在我加个依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
    <version>2.7.1</version>
</dependency>

在这里插入图片描述

OK,现在再试一次

在这里插入图片描述

效果超级明显,这就说明它已经加载了所有与redis 有关的bean 了

在这里插入图片描述

就是这句话生效了。

在这里插入图片描述

再看看这个,好家伙,和我们之前的案例有原理相像啊

点进去看看

在这里插入图片描述

嗯,它也没说它是个bean

在这里插入图片描述

我的这个也没说,看看它的默认值

在这里插入图片描述

这也是我们不配就能用的原因

在这里插入图片描述

接着后面它又导入了两组客户端的实现【这就是一个对象里面包另一个对象了,想想我们写配置的时候】

再接着看

在这里插入图片描述

如果我没有找到redisTemplate 这样一个bean,我就给你一个,如果你自己定义了,那我就不加载了,因为它怕加载重了

太细了

下面的StringRedisTemplate 也是一样的道理

在这里插入图片描述

OK,

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

1.17.2 小结
  1. 先开发若干种技术的标准实现
  2. SpringBoot启动时加载所有的技术实现对应的自动配置类
  3. 检测每个配置类的加载条件是否满足并进行对应的初始化
  4. 切记是先加载所有的外部资源,然后根据外部资源进行条件比对

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41394.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【STA】(1)引言

目录 1. 纳米级设计 2. 什么是STA 3. 为什么要进行STA 4. 设计流程 5. 不同阶段的STA 6. STA的局限性 1. 纳米级设计 在半导体器件中&#xff0c;金属互连线通常被用来连接电路中的各个部分&#xff0c;进而实现整个芯片。随着制造工艺的进一步缩小&#xff0c;这些互连线…

【电源专题】案例:不导这颗MOS管的原因是在电路上不通用?

本案例发生在MOS管替代料导入时。正常情况下在替代料导入、部品导入的时候,我们需要查看规格书。怎么查找规格书可以看文章【电子通识】芯片资料查询方法 对于一些关键的信息我们要做对比,一般来说要通过列表进行对比。但因为不同的供应商的测试标准不同,有很多是很难对比的…

信号与系统2——LTI

信号与系统2——LTI一、Introduction1. Representation of LTI systems2. Significance of unit impulse二、DT-LTI&#xff1a;Convolution Sum1. Output2. Impulse response of LTI system H3. Convolution sum4. Convolution Sum Evaluation Procedure5. Sequence Convoluti…

Python 数据容器(1) - list(列表)

文章目录什么是数据容器&#xff1f;Python中的数据容器数据容器&#xff1a;list&#xff08;列表&#xff09;基本语法案例演示列表的下标&#xff08;索引&#xff09;列表常用操作list容器操作总结什么是数据容器&#xff1f; 一种可以容纳多份数据的数据类型&#xff0c;容…

算法学习 | 回溯算法之深度优先搜索常见题型练习

目录 岛屿的最大面积 电话号码的字母组合 二进制手表 组合总数 活字印刷 岛屿的最大面积 题目链接&#xff1a;leetcode-695.岛屿的最大面积 示例 输入&#xff1a;grid [[0,0,1,0,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,0,1,1,1,0,0,0],[0,1,1,0,1,0,0,0,0,0,0,0,0],[0,…

线程“八锁“ synchronized到底是对哪个对象加锁?

线程"八锁" synchronized到底是对哪个对象加锁? 习题一 class Number{public synchronized void a(){System.out.println("1");}public synchronized void b(){System.out.println("2");} } public class TestBlock {public static void main(…

从Zemax OpticStudio导入光学系统

摘要 ZemaxOpticStudio是一款广泛使用的光线追迹软件。VirtualLab Fusion可以从Zemax OpticStudio导入光学系统&#xff0c;包括完整3D位置信息和镜片玻璃。导入后&#xff0c;光学系统的结构数据将显示为单独的表面或可以组合成VirtualLab Fusion中的组件。VirtualLab Fusion可…

docker入门(一):在centOS虚拟机上安装docker

索引CentOS虚拟机安装1.下载CentOS镜像问题1-报错“您已输入用户名&#xff0c;客户机操作系统将保留此用户名”2.根据docker官方指导进行安装1.卸载旧版本&#xff08;初次安装可以忽略&#xff09;2.确保能联网后下载前置软件包3.设置镜像库&#xff08;阿里版&#xff09;4.…

CLIP后续--LSeg,GroupViT,ViLD

这个博客开了有两个月&#xff0c;一直没写成&#xff0c;最近封寝给它完成~躺平第三天 CLIP应用领域概览&#xff1a; 1. LSeg 原论文地址&#xff1a;https://arxiv.org/abs/2201.03546 代码&#xff1a;https://github.com/isl-org/lang-seg 这个图就很清楚的说明了zero…

mysql数据库管理

目录 一、MySQL数据库管理 1、库和表 2、常用的数据类型 3、char和varchar区别 二、查看数据库结构 三、SQL语句 1、SQL语句分类&#xff1a; 四、创建及删除数据库和表 五、管理表中的数据记录 六、修改表名和表结构 七、自增 八、填充 九、克隆表 十、清空表&am…

信号与系统1——Signals and Systems

信号与系统1——Signals and Systems一、Introduction1. Signals and Systems信号与系统(1) Signal信号(2) System系统2. Classification of Signals信号的分类(1) Continuous-time & discrete-time1) Continuous-Time signal连续时间信号2) Discrete-Time signal离散时间信…

【Hack The Box】linux练习-- Passage

HTB 学习笔记 【Hack The Box】linux练习-- Passage &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年9月7日&#x1f334; &#x1f36…

浅析数据仓库和建模理论

第一章 认识数据仓库 1.1 数据仓库概念 数据仓库&#xff0c;英文名称为 Data Warehouse&#xff0c;可简写为 DW 或 DWH。数据仓库&#xff0c;是为企业所有级别的决策制定过程&#xff0c;提供所有类型数据支持的战略集合。它是单个数据存储&#xff0c;出于分析性报告和决…

BDD - SpecFlow SpecRun Web UI 多浏览器测试

BDD - SpecFlow & SpecRun 一个 Cases 匹配多个浏览器引言方案SpecFlow Runner profiles实现被测 Web Application创建一个 Class Libary 项目添加 NuGet PackagesSpecFlow & SpecRun 包添加 Selenium包其它包创建 Feature 文件配置 Default.srprofileDefault.srprofil…

MySQL的概念

MySQL的概念一.数据库的基本概念1、数据&#xff08;Data&#xff09;2、表3、数据库4、数据库管理系统&#xff08;DBMS&#xff09;4.1 关系数据库4.2 非关系型数据库 NoSQL5、数据库系统6、访问数据库的流程二.数据库系统发展史1.第一代数据库2.第二代数据库3.第三代数据库三…

JAVA多线程(MultiThread)的各种用法

多线程简单应用 单线程的问题在于&#xff0c;一个线程每次只能处理一个任务&#xff0c;如果这个任务比较耗时&#xff0c;那在这个任务未完成之前&#xff0c;其它操作就会无法响应。 如下示例中&#xff0c;点击了“进度1”后&#xff0c;程序界面就没反应了&#xff0c;强行…

类文件结构和初识一些字节码指令

文章目录类文件的结构为什么要了解字节码指令Class文件结构Java虚拟机规定的类结构魔数版本常量池访问标志类索引、父类索引、接口索引Ⅰ. interfaces_count&#xff08;接口计数器&#xff09;Ⅱ. interfaces[]&#xff08;接口索引集合&#xff09;字段表集合**1. 字段表访问…

【React】使用 react-pdf 将数据渲染为pdf并提供下载

文章目录前言环境步骤1. 安装react脚手架2. 使用 create-react-app 创建项目 &#xff08;首字母不要大写、不要使用特殊字符&#xff09;3. 用 vscode 打开目录 react-staging4. yarn 启动项目5. 参考 react-pdf readme加入依赖6. 结合 github readme 和官方文档产出 demo 代码…

OpenGL 色彩替换

目录 一.OpenGL 色彩替换 1.IOS Object-C 版本1.Windows OpenGL ES 版本2.Windows OpenGL 版本 二.OpenGL 色彩替换 GLSL Shader三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录…

防抖debounce与节流throttle(63rd)

一、前言 当用户高频触发某一事件时&#xff0c;如窗口的resize、scroll&#xff0c;输入框内容校验等&#xff0c;此时这些事件调用函数的频率如果没有限制&#xff0c;可能会导致响应跟不上触发&#xff0c;出现页面卡顿&#xff0c;假死现象。此时&#xff0c;我们可以采用…