SpringBoot SpringBoot 原理篇 1 自动配置 1.17 自动配置原理【3】
创始人
2024-02-21 21:30:04
0

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的,现在我加个依赖

org.springframework.bootspring-boot-starter-data-redis2.7.1

在这里插入图片描述

OK,现在再试一次

在这里插入图片描述

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

在这里插入图片描述

就是这句话生效了。

在这里插入图片描述

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

点进去看看

在这里插入图片描述

嗯,它也没说它是个bean

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

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

再接着看

在这里插入图片描述

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

太细了

下面的StringRedisTemplate 也是一样的道理

在这里插入图片描述

OK,

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

相关内容

热门资讯

连接场景、连接政策、连接市场:... 近日,国务院常务会议专门部署“增强消费品供需适配性,进一步促进消费政策措施”,强调要以消费升级引领产...
美盈森(002303)披露控股... 截至2025年12月18日收盘,美盈森(002303)报收于3.91元,较前一交易日上涨0.26%,...
一个人就是一支队伍!徐汇区发布... “一人+AI即公司”——这种被称为“OPC”(One Person Company)的新创业形态,正...
第一部京津冀流域协同立法!《北... 2025年11月28日,北京市第十六届人民代表大会常务委员会第二十次会议通过了《北京市永定河保护条例...
南天信息(000948)披露关... 截至2025年12月18日收盘,南天信息(000948)报收于17.04元,较前一交易日上涨0.95...
扩大社会保险补贴范围政策申请本... 2025年度面向重点群体的阶段性补贴政策“扩大社会保险补贴范围政策”已进入最后半个月的申请阶段,系统...
常友科技(301557)发布信... 截至2025年12月18日收盘,常友科技(301557)报收于146.18元,较前一交易日下跌0.4...
既有真金白银又有政策服务,上海... 北杨人工智能小镇。徐汇区供图 到2026年上半年,上海徐汇将建设5个超级创业者社区。 据徐汇区介绍,...
赋能六大产业!广州越秀“高质量... 近日,广州市越秀区推进“高质量发展十条”产业政策兑现工作,涵盖了高端人才、产业发展、载体提升、行业活...
扎哈罗娃:日方不负责任的政策使... 当地时间12月18日,俄罗斯外交部发言人扎哈罗娃在当日的简报会上回答总台记者提问。 在回答日本军费连...