SpringBoot自动配置原理-注解

话不多说直接上图

在这里插入图片描述
当我们的SpringBoot启动类一写 SpringMVC启动需要的一切配置就全部都有了 太神奇了 It`s amazing
那他是如何实现的呢 一切的奥秘 都在这个启动类上面

  • 首先我们看到这个启动类上面主要有两个东西 一个是@SpringBootApplication注解 另一个是run方法
  • 显然他能够实现自动配置的原因就在这两个地方 (就他俩特殊)

这里我们主要针对注解分析 run方法可参考我另一篇文章

我们先来看下这个注解 鼠标放在注解上 ctrl+左键

在这里插入图片描述
在这里插入图片描述

  • 注解@SpringBootApplication 上面有七个注解 上面四个是元注解 这里不做解释 下面三个是新面孔 我们主要对他们进行讲解
三个注解的解析

@SpringBootConfiguration

鼠标ctrl+左键 进入
在这里插入图片描述
进入后
在这里插入图片描述
这个注解上面又加了一个@Configuration 这是一个配置注解 说明这个@SpringBootConfiguration注解他就是一个配置注解

  • 然后我们在看上面红色框选中的注释
    在这里插入图片描述
  • 第一个红色框的内容
表明当前类 提供了SpringBoot应用的配置  
也就是说@SpringBootConfigurationc是声明 这个类提供了SpringBoot的配置

既然是声明配置类那么@Configuration和@SpringBootConfiguration效果是一样的

  • 既然我们自己写的配置注解@Configuration和@SpringBootConfigturation用法是一样的,那为什么我们还要单独的写一个@SpringBootConfigturation

  • 我们在来看第二个红色框的内容

他是说 一个应用应该只包含一个 @SpringBootConfigturation 这样的注解 
而SpringBoot应用必须使用@SpringBootConfiguration注解

虽然两个注解的功能是一样的 但是一般普通的配置使用@Configuration 而SpringBoot的应用则使用@SpringBootConfiguration 以便区分

  • 也就说加上了@SpringBootConfiguration 就表明这是一个SpringBoot的配置类 所以我们在SpringBoot项目上加上@SpringBootConfiguration 等同于加上了@Configuration
  • 所以我可以直接在这个类做一系列配置类的操作 比如配置一个bean
    在这里插入图片描述
  • 我们再来看第二个注解

@EnableAutoConfiguration

在这里插入图片描述

  • 翻译一下这个注解 : 启用自动配置
  • 好像这是一个自动配置的开关
    在这里插入图片描述
  • 第二注解关注注释即可 我们来看红色框选中的内容
启动Spring容器的自动配置  然后猜测并配置你可能需要的bean ,这种猜测是基于你的classpath 或者是你所定义的bean
例如:你引入了tomcat的jar 那么他会给你引入tomcat的配置  除非你自己定义了tomcat的配置

也就是说 配置了这个注解,就是开启了自动配置 你引入了什么依赖,他就会自动为你配置相关的内容
如果你自己配置了 那么会使用你所配置的内容

  • 第三个注解

@ComponentScan

在这里插入图片描述

  • 注解翻译:组件扫描

  • 我们ctrl+左键进入
    4

  • 我们先来看注释 红色框选中的内容

为Configuration的配置类配置组件扫描命令 
提供了与<context:component-scan> 同样的功能 

这表示 这个注解就相当于我们在xml中配置了包扫描

那么这里面配置了扫描哪些内容呢 我们来看一下
在这里插入图片描述

  • 这是用来扫描带注解的包

我们在来看最上面注释的第二段
在这里插入图片描述

  • 通过 basePackageClasses basePackages 这两个属性来去指定要扫描哪些包 如果没有指定则从声明了这个注解类所在的包开始扫描

(所以大家在声明这个类的时候注意放置的位置)
在这里插入图片描述

@SpringBootConfiguration 一共做了三件事

  • 1 声明配置类
  • 2 开启自动配置
  • 3 扫描包
发布了10 篇原创文章 · 获赞 3 · 访问量 2390

猜你喜欢

转载自blog.csdn.net/qq_44647212/article/details/95887384