SpringBoot自动装配基本原理

如果有一个第三方库希望在 Spring Boot 应用启动时自动配置一些功能,它可以在自己的 JAR 包中提供一个 spring.factories 文件,并在其中指定相关的自动配置类。当应用引入了这个第三方库的依赖后,Spring Boot 就能根据 spring.factories 中的配置来自动应用相应的配置。

简单搜索一下spring.factories

打开看看

装配的大致过程是下面这样的

  1. 本项目写一个配置类,引入第三方的装配类
less 复制代码
@Configuration // 本项目的配置类
@Import(MyImportSelector.class)
static class Config {
    @Bean
    public Bean1 bean1() {
        return new Bean1("本项目");
    }
}
  1. 第三方的装配类通过实现ImportSelector接口,重写selectImports()方法,在该方法中指定在spring.factories的键值,等到SpringBoot执行注解解析时,bean就会被自动引入。
typescript 复制代码
    static class MyImportSelector implements DeferredImportSelector {
        @Override
        public String[] selectImports(AnnotationMetadata importingClassMetadata) {
            List<String> names = SpringFactoriesLoader.loadFactoryNames(MyImportSelector.class, null);
            return names.toArray(new String[0]);
        }
    }

举例

以引入Mybatis相关bean的自动配置类MybatisAutoConfiguration为例,

MybatisAutoConfiguration被注解@Configuration注解,所以会在启动时被SpringBoot扫描,扫描以后,根据相关条件注释,来决定是否自动装配bean。

那么之前提到的import注解在哪里呢?其实在EnableConfigurationProperties点进去看看。

可以得出一个不靠谱的结论,使用Enable打头的注解,大部分都包含使用import来导入bean这一步。

相关推荐
BUTCHER58 分钟前
Java 启动服务时指定JVM(Java 虚拟机)的参数配置说明
java·开发语言·jvm
sheji341615 分钟前
【开题答辩全过程】以 会议室场地预约系统为例,包含答辩的问题和答案
java
摇滚侠28 分钟前
尚硅谷 Java 零基础全套视频教程,System、Runtime、BigDecimal、BigInteger、Random,笔记 151
java·开发语言·笔记
fo安方29 分钟前
软考~系统规划与管理师考试——真题篇——章节——第5章 应用系统规划——解析版
java·运维·网络
阿杰真不会敲代码34 分钟前
POI 讲解
java·spring boot
海鸥8134 分钟前
ArgoCD App of Apps 模式详解
java·elasticsearch·argocd
二哈喇子!41 分钟前
面向对象经典题整理
java·面向对象·
二哈喇子!42 分钟前
模仿淘宝购物系统的Java Web前端项目(开源项目)
java·javaweb
二哈喇子!1 小时前
Java Web项目怎么创建 & 没有出现web.xml的解决方法
java·web·web.xml
一起养小猫1 小时前
LeetCode100天Day13-移除元素与多数元素
java·算法·leetcode