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

相关推荐
小陈不好吃11 分钟前
Java 泛型与类型擦除:从 PECS 原则到 TypeToken 绕过
java·开发语言·windows·pecs 原则·typetoken绕过
鶴哥只手遮天16 分钟前
Spring Framework 7.0.9 深度剖析-03-IoC 容器核心:BeanFactory 与 BeanDefinition 体系
java·后端·开源
tianbin91119 分钟前
大模型流式输出异常排查,API 中转站层面的问题定位思路
后端·云计算
ydjs678899-bot22 分钟前
如何在Java中打印pdf静默打印和打印对话框选择
java·python·pdf
Shaoshing24 分钟前
存储引擎与架构
java·开发语言·架构
鶴哥只手遮天32 分钟前
Spring Framework 7.0.9 深度剖析-01-整体架构与设计哲学
java·后端·开源
const_qiu39 分钟前
第 2.5 章 2.5.6:前端登录、Token 无感续签与路由守卫
java·前端·人工智能·状态模式
devilnumber1 小时前
Java 代理模式(简单理解回顾)
java·开发语言·代理模式
GetcharZp1 小时前
不止是企业知识库:腾讯开源 WeKnora,让文档变成可问答、可执行的知识系统
后端
她的男孩1 小时前
Spring Boot 4 升级别只看编译绿:Forge Admin 在 Jackson、Tomcat JSON 限流、MP 包名与 Flowable 库上踩过的坑
java·spring boot·后端