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

相关推荐
ooseabiscuit15 分钟前
Laravel4.x:现代PHP框架的奠基之作
java·开发语言·php
Cosolar21 分钟前
大模型应用开发面试 • 每日三题|Day 003|多Agent系统中的通信协议、冲突解决和一致性保障
人工智能·后端·面试
汪汪大队u28 分钟前
续:从 Docker Compose 到 Kubernetes(2)—— 服务优化与排错
网络·后端·物联网·struts·容器
节奏昂1 小时前
【一份基础软件的下载地址和安装地址】
java
没什么本事1 小时前
关于C# panel 添加lable问题 -- 明确X和Y 位置错误
android·java·c#
无风听海1 小时前
MapStaticAssets()深度解析:ASP.NET Core 静态资源交付的现代范式
后端·asp.net
dhashdoia2 小时前
GPT-5.5 代码开发实战:Codex与Browser Use深度集成与星链4SAPI优化方案
java·数据库·人工智能·gpt·架构
xuhaoyu_cpp_java2 小时前
SpringMVC学习(二)
java·经验分享·笔记·学习·spring
geovindu3 小时前
go: Lock/Mutex Pattern
开发语言·后端·设计模式·golang·互斥锁模式
counterxing3 小时前
AI Agent 做长任务,问题到底 出在哪?
前端·后端·ai编程