SpringBoot自动化配置原理和自定义starter方式

 更新时间:2026年04月29日 09:51:58   作者:又旅行又开拓的绳匠..  
SpringBoot自动配置机制主要通过-spring-boot-starter和-spring-boot-autoconfigure创建自定义starter模块,使用EnableAutoConfiguration注解加载自动配置类,启动类通过创建Spring容器完成自动化装配

SpringBoot自动化配置原理和自定义starter

SpringBootConfiguration

底层是一个Configuration,表示启动类也是一个配置类,可以在内部定义相关Bean

ComponentScan

表示组件扫描,默认会扫描启动类包及子包下Spring能识别的组件

EnableAutoConfiguration

底层是一个Import注解

该注解中导入 AutoConfigurationImportSelector类,该类最终实现了ImportSelector

该类中有一个 selectImports 方法会被调用,

selectImports()方法底层调用getAutoConfigurationEntry()方法,获取可自动配置的配置类信息集合

getAutoConfigurationEntry()方法通过调用getCandidateConfigurations(annotationMetadata, attributes)方法获取在配置文件中配置的所有自动配置类的集合

获取所有基于 META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中配置类的集合

并筛选满足starter和各种Condtional条件的全类名,封装成一个字符串数组加载到内存中

启动类会通过run方法去创建与初始化Spring容器,在初始化时会把上面注解加载到内存中的字符串数组对应的内容,创建成对象注入到Spring容器,至此就完成了自动化装配

自定义starte

创建自定义starter模块 方法名-spring-boot-starter(进行依赖管理)

把所有的依赖统一管理起来

创建autoconfigure模块 方法名-spring-boot-autoconfigure

在starter中引入autoconfigure (只需要引入starter起步依赖即可)

在autoconfigure模块方法名-spring-boot-autoconfigure中完成自动配置

定义一个自动配置类,在自动配置类中将所要配置的bean都提前配置好

定义配置文件,把自动配置类的全类名定义在配置文件(META-INF/spring/xxxx.imports)中

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java集合List与Array的相互转换

    Java集合List与Array的相互转换

    本篇文章主要介绍了Java集合List与Array的相互转换,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • 关于Spring Boot获取bean的3种方式

    关于Spring Boot获取bean的3种方式

    这篇文章主要介绍了关于Spring Boot获取bean的3种方式,在spring中ApplicationContext这个上下文对象是获取bean的基础,需要的朋友可以参考下
    2023-04-04
  • Spring boot集成Go-FastDFS实现图片上传删除等功能实现

    Spring boot集成Go-FastDFS实现图片上传删除等功能实现

    这篇文章主要介绍了Spring boot集成Go-FastDFS实现图片上传删除等功能实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • java基于swing实现的五子棋游戏代码

    java基于swing实现的五子棋游戏代码

    这篇文章主要介绍了java基于swing实现的五子棋游戏代码,主要涉及图形界面与数组的用法,有不错的参考借鉴价值,需要的朋友可以参考下
    2014-11-11
  • Java中volatile关键字的作用与用法详解

    Java中volatile关键字的作用与用法详解

    volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一件容易的事情。这篇文章主要介绍了Java中volatile关键字的作用与用法详解的相关资料,需要的朋友可以参考下
    2016-09-09
  • 解读System.getProperty("ENM_HOME")中的值从哪获取的

    解读System.getProperty("ENM_HOME")中的值从哪获取的

    这篇文章主要介绍了解读System.getProperty("ENM_HOME")中的值从哪获取的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Java网络编程之TCP程序设计

    Java网络编程之TCP程序设计

    这篇文章主要为大家详细介绍了Java网络编程之TCP程序设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-08-08
  • Java字符串转驼峰格式的方法

    Java字符串转驼峰格式的方法

    在开发场景中,我们会遇到一些涉及字符串的转化,本文主要介绍了Java字符串转驼峰格式的方法,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Java线程间协作wait、notify和notifyAll详解

    Java线程间协作wait、notify和notifyAll详解

    这篇文章主要介绍了Java线程间协作wait、notify和notifyAll详解,在 Java 中可以用 wait、notify 和 notifyAll 来实现线程间的通信,尽管关于wait和notify的概念很基础,它们也都是Object类的函数,但用它们来写代码却并不简单,,需要的朋友可以参考下
    2023-10-10
  • SpringBoot接口获取参数的常用注解详解

    SpringBoot接口获取参数的常用注解详解

    SpringBoot 接口获取参数的注解非常丰富,这篇文章主要为大家详细介绍了一些常用参数注解的使用,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2026-01-01

最新评论