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如何获取对象属性及对应值

    Java如何获取对象属性及对应值

    这篇文章主要介绍了Java如何获取对象属性及对应值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • 浅析javax.servlet.Servlet,ServletContext接口

    浅析javax.servlet.Servlet,ServletContext接口

    本篇文章是对javax.servlet.Servlet,ServletContext接口进行了纤细的分析介绍,需要的朋友参考下
    2013-07-07
  • Java打乱数组元素简单代码例子

    Java打乱数组元素简单代码例子

    在Java编程中,我们经常需要对数组进行乱序操作(即将数组中的元素随机打乱顺序),这篇文章主要给大家介绍了关于Java打乱数组元素的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-03-03
  • java实现简单的图书借阅系统

    java实现简单的图书借阅系统

    这篇文章主要为大家详细介绍了java实现简单的图书借阅系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 使用Java高效将CSV转换为Excel的实现方法

    使用Java高效将CSV转换为Excel的实现方法

    在日常的数据处理和分析工作中,CSV文件因其轻量级和通用性而广受欢迎,然而,当我们需要进行复杂的数据分析或利用Excel强大的图表和公式功能时,将CSV数据转换为Excel文件就成了开发者们常见的需求和痛点,本文将深入探讨如何利用Java高效地将CSV转换为Excel
    2025-08-08
  • MyBatis连接池的深入和动态SQL详解

    MyBatis连接池的深入和动态SQL详解

    这篇文章主要介绍了MyBatis连接池的深入和动态SQL详解,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02
  • 解决mybatis用Map返回的字段全变大写的问题

    解决mybatis用Map返回的字段全变大写的问题

    这篇文章主要介绍了解决mybatis用Map返回的字段全变大写的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • Java编程利用socket多线程访问服务器文件代码示例

    Java编程利用socket多线程访问服务器文件代码示例

    这篇文章主要介绍了Java编程利用socket多线程访问服务器文件代码示例,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10
  • MyBatis使用注解开发实现过程详解

    MyBatis使用注解开发实现过程详解

    这篇文章主要介绍了MyBatis使用注解开发实现过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • MySQL MyBatis 默认插入当前时间方式

    MySQL MyBatis 默认插入当前时间方式

    这篇文章主要介绍了MySQL MyBatis 默认插入当前时间方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10

最新评论