海风影像馆 海风影像馆
首页
扎根医疗
学习笔记
技术实战
项目管理
影像空间
驴行天下
阳明心学
  • 学习方法
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 分类
  • 标签
  • 归档

知行旅人

生有热烈,藏于俗常。
首页
扎根医疗
学习笔记
技术实战
项目管理
影像空间
驴行天下
阳明心学
  • 学习方法
  • 心情杂货
  • 实用技巧
  • 友情链接
  • 分类
  • 标签
  • 归档
  • 数据结构

  • 算法

  • Java基础

  • Java并发

  • JVM

  • 开发框架

    • SpringMVC
    • Spring
    • Mybatis
    • Sentinel
    • Spring Security Oauth2
    • SpringBoot
      • 1 自动装配原理
        • 1.1 注解说明
        • 1.2 自动配置生效
        • 1.3 总结
    • Spring Cloud Gateway
  • 持久化

  • 缓存

  • 消息中间件

  • 微服务

  • 系统架构

  • 网络

  • 操作系统

  • 学习笔记
  • 开发框架
zhixinglvren
2022-10-21
目录

SpringBoot

# 1 自动装配原理

# 1.1 注解说明

SpringBoot 的启动类上有一个 @SpringBootApplication 注解,这是一个复合注解或派生注解,在 @SpringBootApplication 里有一个注解 @EnableAutoConfiguration 用于开启自动配置。

image-20221021163928393

@EnableAutoConfiguration也是一个派生注解,其中的关键功能由 @Import 提供,其导入的AutoConfigurationImportSelector 的 selectImports() 方法通过 SpringFactoriesLoader.loadFactoryNames() 扫描所有具有 META-INF/spring.factories 的jar包。找到所有配置类的全类名对应的class,然后将所有自动配置类加载到Spring容器中。

image-20221021171457621

image-20221021171607762

spring-boot-autoconfigure-xxx.jar 里就有一个这样的 spring.factories 文件。

image-20221021180750387

# 1.2 自动配置生效

每一个XxxxAutoConfiguration自动配置类都是在某些条件之下才会生效的,这些条件的限制在Spring Boot中以注解的形式体现,常见的条件注解有如下几项:

@ConditionalOnBean:当容器里有指定的bean的条件下。

@ConditionalOnMissingBean:当容器里不存在指定bean的条件下。

@ConditionalOnClass:当类路径下有指定类的条件下。

@ConditionalOnMissingClass:当类路径下不存在指定类的条件下。

@ConditionalOnProperty:指定的属性是否有指定的值,比如@ConditionalOnProperties(prefix=”xxx.xxx”, value=”enable”, matchIfMissing=true),代表当xxx.xxx为enable时条件的布尔值为true,如果没有设置的情况下也为true。
1
2
3
4
5
6
7
8
9

# 1.3 总结

SpringBoot 启动的时候会通过 @EnableAutoConfiguration 注解找到 META-INF/spring.factories 配置文件中的所有自动配置类,并对其进行加载。

而这些自动配置类都是以AutoConfiguration结尾来命名的,它实际上就是一个JavaConfig形式的Spring容器配置类。

它能通过以Properties结尾命名的类中取得在全局配置文件中配置的属性,如:server.port,而XxxxProperties类是通过 @ConfigurationProperties 注解与全局配置文件中对应的属性进行绑定的。

上次更新: 2022/11/24, 17:59:25
Spring Security Oauth2
Spring Cloud Gateway

← Spring Security Oauth2 Spring Cloud Gateway→

最近更新
01
Linux常用指令
11-24
02
GitHub高级搜索技巧
11-24
03
散列表
11-09
更多文章>
Theme by Vdoing | Copyright © 2020-2023 知行旅人 | MIT License | 粤ICP备20036515号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式