最简单的SpringBoot(3.0)的自动配置原理教程,看完不白雪!
文章目录
虽然是3,但是原理是一样样的
首先聊一下,为什么要去学这个点东西,当然是面试比较常问啊hhh(谁让咱家SB比较火热呢),为什么 比较常问呢?(因为大家都爱问,我不问岂不是显得我很特别?)因为日常的生产中啊,咱们经常会定义一些公共的组件,提供给各个团队的使用,为了将别人使用这些组件的时候更方便,我们通常会把这些组件定义成一些公共的starter,比如(mybatis-spring-boot-starter),那如果说你想自定义starter的话,你就必须先了解自动配置的原理(自定义starter教程明天发,大家可以先去看看mybatis的starter,绝不白雪)等你看完这篇教程以后呢,就可以完美的解决以上的问题,到时候年薪百万不是梦啊(我不行但你们肯定行hang~)
正文
所谓的自动配置,就是boot工程启动后,起步依赖中的一些bean对象会自动的注入到ioc容器里面去(约定大于配置)
之前我们学习注册三方bean的时候,流程是
【引入三方jar——编写配置类——使用@Bean|@Import将其进行导入,(不理解看我上一篇)SpringBoot中如何注册第三方Bean】
我们日常编写的公共组件就可以看做是第三方的jar,我们想要使用这些组件带来的便捷,说白了就是拿着里面的类直接用,就需要把他放到IOC容器里面交给Spring管理,上述的流程虽然能够完成注册Bean到IOC,但是,自动了么?回顾一下,我们去引入mybatis的起步依赖之后,像SqlSessionFactoryBean这种Bean对象就自动的注入到IOC容器里面去了,我们有去做相应的配置么?答案显然是否定的。那究竟怎么才能让它自动呢?保留这个疑问,接下来我们从源码里去找一下答案,看看SpringBooot的自动配置究竟是怎么个事。
前戏引入
都说天下文章一大抄,你也抄来我也抄。在学习自动配置之前,我们先来验证一个问题,引入了对应的起步依赖,启动后会不会自动的把对应的bean对象注入到ioc容器里
就以 spring-boot-starter-web起步依赖为案例,【验证:工程启动后会不会向ioc容器里面注入DispatcherServlet】
第一步:准备一个干净的SpringBoot工程,不要引入任何依赖
依次展示:pom文件、yml文件以及工程里包结构,可以看到除了SpringBoot的核心依赖以外,该项目没有做任何其他配置
第二步:验证没有引入web依赖后的IOC容器里是不是存在DispatcherServlet这个Bean
@SpringBootApplication
public class Sb3AutoConfigApplication {
public static void main(String[] args) {