当前位置: 首页 > news >正文

SpringBoot SpringBoot 原理篇 1 自动配置 1.18 自动配置原理

SpringBoot

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

SpringBoot 原理篇

文章目录

      • SpringBoot
      • SpringBoot 原理篇
      • 1 自动配置
        • 1.18 自动配置原理
          • 1.18.1 变更自动配置
          • 1.18.2 小结
          • 1.18.3 总结

1 自动配置

1.18 自动配置原理

1.18.1 变更自动配置

既然这个自动配置这么好用,自己也想搞这种自动配置的东西,可以实现吗?

【答案是当然的】

看看MP 的自动配置类

在这里插入图片描述

点开META-INF

在这里插入图片描述

可以看到它也有这个东西

在这里插入图片描述

做自动配置方法其实很简单,就是在spring.factories 做配置就行了

【直接开干】

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.dingjiaxiong.bean.CartoonCatAndMouse

在这里插入图片描述

OK, 现在其实就已经完成了

修改一下运行程序

在这里插入图片描述

我现在不导入了,让它自动配置

在这里插入图片描述

我超!这也行

再整点儿花活儿

在这里插入图片描述

我现在给它加点条件,意思有redis ,我才被加载

@ConditionalOnClass({RedisOperations.class})

但是我在pom 文件中又把redis 依赖给注掉

在这里插入图片描述

很明显, 都红了,就不会自动配置了

这样看不出来效果,因为编译通不过了已经,恢复成全路径名

@ConditionalOnClass(name = "org.springframework.data.redis.core.RedisOperations")

再次执行运行类

在这里插入图片描述

没毛病,这次就加载不到了,自动配置失败

如果把坐标放开

在这里插入图片描述

这样就又加载到了

这是加,那么问题又来了,现有的我们能不能把它去了【当然】

跟老师一样,

在这里插入图片描述

就去你

修改配置文件

在这里插入图片描述

spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.task.TaskExecutionAutoConfiguration

OK,再次运行,看看它还可以加载不

在这里插入图片描述

没毛病

这是在配置文件中写

也可以在启动类上写

例如,

在这里插入图片描述

我现在还想把它 也排除掉

@SpringBootApplication(excludeName = "org.springframework.boot.autoconfigure.task.TaskSchedulingAutoConfiguration")

在这里插入图片描述

OK, 直接启动

在这里插入图片描述

肯定就没有加载了

OK,回顾一下

  • 自定义自动配置(META-INF/spring.factories)

在这里插入图片描述

  • 控制SpringBoot内置自动配置类加载

在这里插入图片描述

  • 变更自动配置:去除tomcat自动配置(条件激活),添加jetty自动配置(条件激活)

在这里插入图片描述

1.18.2 小结
  1. 通过配置文件exclude属性排除自动配置
  2. 通过注解@EnableAutoConfiguration属性排除自动配置项
  3. 启用自动配置只需要满足自动配置条件即可
  4. 可以根据需求开发自定义自动配置项
1.18.3 总结
  1. bean加载方式(8+)
  2. bean加载控制(编程 & 注解)
  3. bean依赖属性配置(Properties)
  4. 自动配置原理
  5. 变更系统自动配置(配置文件、注解属性)
  6. 添加自定义自动配置(META-INF/spring.factories)

相关文章:

  • Object.seal和Object.freeze的区别
  • Redis的RDB持久化
  • java EE初阶 — 如何进行多线程编程
  • 校园论坛设计(Java)——介绍篇
  • Linux | 进程间通信 | system V共享内存 | 介绍和使用
  • 初学原生Ajax-补充:原生ajax的封装使用
  • OpenJudge NOI 2.1 6188:比饭量
  • netapp3210存储更换故障硬盘过程
  • 【食品加工技术】第五章 烘烤食品加工技术 笔记
  • 【问题思考总结】缺页时页表怎么变?【操作系统中的缺页】
  • c++ 对象和类
  • C#语言实例源码系列-实现滚动字幕
  • 2022年,数字化转型升级,越来越重要
  • C,C++中原生数组索引的奇怪写法
  • 几率波量子雷达/反事实量子通信
  • 【看表情包学Linux】冯诺依曼架构 | 理解操作系统 | 基于 Pintos 实现新的用户级程序的系统调用
  • 单链表——简单的增删查改
  • 电子技术——MOS放大器基础
  • 嵌入式 学习
  • 【Linux】vim编辑器的使用
  • 强化学习笔记:基于策略的学习之策略迭代(python实现)
  • 1. Spring 基础入门
  • springboot 分布式全局唯一id的生成-雪花算法snowflake
  • 如何使用VMware虚拟机(带你快速了解)
  • Python---学生管理系统(pyinstaller)
  • 扫地机器人电路原理图_拆开看个究竟,石头扫拖一体机器人T6到底如何?
  • mysql order by limit slow 慢查询
  • Opencv249和Opencv3.0以上的 SolvePnp函数详解(附带程序、算例,应用点对分析)
  • python t检验显著差异_两组数据的均值是否具有显著差异的T检验
  • java mian 线程退出时机
  • Matlab 摄像机标定+畸变校正(新版本MATLAB)
  • cdr2020由于你已经安装了_手把手教你在本机安装spark
  • SpringBoot配置读取不到 PropertySourcesPlaceholderConfigurer和PropertyPlaceholderConfigurer
  • 利用matlab摄像机标定(老版本MATLAB)
  • linux 查看网络流量