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这一步。

相关推荐
神奇的程序员3 小时前
从已损坏的备份中拯救数据
运维·后端·前端工程化
Goldn.4 小时前
Java核心技术栈全景解析:从Web开发到AI融合
java· spring boot· 微服务· ai· jvm· maven· hibernate
oden4 小时前
AI服务商切换太麻烦?一个AI Gateway搞定监控、缓存和故障转移(成本降40%)
后端·openai·api
李慕婉学姐5 小时前
【开题答辩过程】以《基于Android的出租车运行监测系统设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·后端·vue
m0_740043735 小时前
SpringBoot05-配置文件-热加载/日志框架slf4j/接口文档工具Swagger/Knife4j
java·spring boot·后端·log4j
编织幻境的妖5 小时前
SQL查询连续登录用户方法详解
java·数据库·sql
未若君雅裁5 小时前
JVM面试篇总结
java·jvm·面试
kk哥88996 小时前
C++ 对象 核心介绍
java·jvm·c++
招风的黑耳6 小时前
我用SpringBoot撸了一个智慧水务监控平台
java·spring boot·后端
xunyan62346 小时前
面向对象(下)-接口的理解
java·开发语言