[2025.3.1 JavaWeb学习]SpringBoot原理(源码分析)

起步依赖

即Maven的依赖传递

自动配置

作用

  • SpringBoot的自动配置就是当spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发

方案

  • 问题1、@SpringBootApplication注解会自动对所在包以及子包进行组件扫描,使@Component等Bean相关组件生效,而除此之外的范围则无法生效
  • 方案1:在启动类上手动加上@ComponentScan(XXX)手动指定要扫描的包,但是过于繁琐
  • 方案2:使用@Import(xxx.class)导入,可以
    • 导入普通类
    • 导入配置类
    • 导入ImportSelector接口实现类
    • 第三方依赖自己提供@EnableXxxx注解,封装@Import注解,不用启动类事先知道类名,而是由第三方依赖决定

原理(源码跟踪)

SpringBootApplication注解 - 自动配置原理

  • 首先包含四个基础注解:
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
  • @SpringBootConfiguration封装了一个@Configuration注解,也是为什么@SpringBootApplication可以定义Bean对象的原因,说明当前类也是配置类
  • 封装了一个@ComponentScan,是@SpringBootApplication可以对包及其子包进行扫描的原因
  • @EnableAutofiguration,自动配置相关注解,底层代码如下:

image

  • 其中使用@Import导入接口实现类AutoConfigurationImportSelector,该类实现了DeferredImportSelector接口,而该接口继承至ImportSelector接口,其中有方法selectImports,会返回需要导入到IOC容器中的类的全类名,DeferredImportSelector接口重写了selectImports方法,如下:

image

  • 根据最后返回结果涉及Configuration,追溯源码,可得到如下:

image

  • 说明会从META-INF/spring/下的某文件进行全类名导入,一是spring.factories,是早期springboot进行配置的文件;而在2.7.0之后,则使用.AutoConfiguration.imports文件进行配置

image

  • 上述文件中包含很多类的全类名,也包括一些类的自动配置类,这也说明了为什么SpringBoot能实现自动配置

条件配置

  • 在自动配置类中定义Bean对象时,会使用@ConditionalOnMissingBean进行条件配置,是一个父注解,具有以下子注解:

image

  • AutoConfiguration.imports文件中,自动配置类都会添加配置条件决定该类是否生效,实现动态灵活配置
posted @   Luna-Evelyn  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

阅读目录(Content)

此页目录为空

点击右上角即可分享
微信分享提示