Spring Boot自动装配原理(易懂)

这篇具有很好参考价值的文章主要介绍了Spring Boot自动装配原理(易懂)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Spring Boot的自动装配原理(易懂)

熟练使用Spring Boot那么自动装配原理的掌握是必不可少的


一、自动装配是什么

Spring Boot的自动装配实际上是从META-INF/spring.factories文件中获取到对应的需要进行自动装配的类,并生成相应的Bean对象,然后将它们交给Spring容器进行管理

二、启动类注解流程关系分析

@SpringBootApplication
public class EntryApplication {

    public static void main(String[] args) {
        SpringApplication.run(EntryApplication.class, args);
    }
}

1.首先展示@SpringBootConfiguration注解流程图

2.代码块展示@SpringBootConfiguration注解流程

启动类的@SpringBootAppliation注解是一个组合注解,由以下3个注解组成

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

其中@EnableAutoConfiguration 注解又分为以下两种注解

@AutoConfigurationPackage
@Import(AutoConfigurationPackages.Registrar.class)  //给容器中导入一个组件
public @interface AutoConfigurationPackage {}
//利用Registrar给容器中导入一系列组件

其中@AutoConfigurationPackage 注解则由以下注解构成

@Import(AutoConfigurationPackages.Registrar.class) 
public @interface AutoConfigurationPackage {

3.注解含义

@SpringBootConfiguration : 标注在某个类上,表示这是一个Spring Boot的配置类;
@ComponentScan : 配置扫描路径,用于加载使用注解格式定义的bean
@EnableAutoConfiguration : 开启自动装配功能

@AutoConfigurationPackage 指定了默认的包规则 \color{#F0F}{指定了默认的包规则 } 指定了默认的包规则就是将主程序类所在包及所有子包下的组件扫描到Spring容器中;
@Import(AutoConfigurationImportSelector.class) : 通过 @Import 注解导入 AutoConfigurationImportSelector类,然后通过该类的 s e l e c t I m p o r t s \color{#F0F}{selectImports } selectImports方法去读取MATE-INF/spring.factories文件中配置的组件的全类名,并按照一定的规则过滤掉不符合要求的组件的全类名,将剩余读取到的各个组件的全类名集合返回给IOC容器并将这些组件注册为bean

三、详细介绍

1.@AutoConfigurationPackage默认包规则详解

spring boot自动装配原理,java,spring,spring boot,后端

2.@Import(AutoConfigurationImportSelector.class)进行自动配置详解

1、利用getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件
2、调用List configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所有需要导入到容器中的配置类
3、利用工厂加载 Map<String, List> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的组件
4、从META-INF/spring.factories位置来加载一个文件。默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件**, 按照条件装配( @ C o n d i t i o n a l ) 最终会按需配置 \color{#F0F}{按照条件装配(@Conditional)最终会按需配置} 按照条件装配(@Conditional)最终会按需配置

spring boot自动装配原理,java,spring,spring boot,后端 


3.当前接口为上图3位置的批量导入器接口

spring boot自动装配原理,java,spring,spring boot,后端
 

4.当前方法为上图4位置的运行结果

spring boot自动装配原理,java,spring,spring boot,后端

四、分析条件装配原理

@Conditional
spring boot自动装配原理,java,spring,spring boot,后端

1.谈到Spring Boot项目最重要的starter场景启动器

spring boot自动装配原理,java,spring,spring boot,后端 Spring Boot所有的自动配置功能都在 spring-boot-autoconfigure 包里面,Spring Boot 自动装配会通过引入了哪些场景这个场景的自动配置才会开启生效,

2.最重要的控制器(dispatcherServlet)

Spring MVC中最重要的控制器(dispatcherServlet)也配置好了
spring boot自动装配原理,java,spring,spring boot,后端

3.文件上传解析器配置

@Bean
@ConditionalOnBean(MultipartResolver.class)  //容器中有这个类型组件
@ConditionalOnMissingBean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME) //容器中没有这个名字 multipartResolver 的组件
public MultipartResolver multipartResolver(MultipartResolver resolver) {
	//给@Bean标注的方法传入了对象参数,这个参数的值就会从容器中找。
	//SpringMVC multipartResolver。防止有些用户配置的文件上传解析器不符合规范
	// Detect if the user has created a MultipartResolver but named it incorrectly
	return resolver;
		}
给容器中加入了文件上传解析器;

以前Spring MVC中要配置文件解析器,名字必须叫multipartResolver ,但是很多人不知道默认行为,Spring Boot可以将你配置的解析器,用默认名称返回,防止不符合规范

4.字符集配置

spring boot自动装配原理,java,spring,spring boot,后端
spring boot自动装配原理,java,spring,spring boot,后端spring boot自动装配原理,java,spring,spring boot,后端

五、总结

最重要的包 spring-boot-autoconfigure
Spring Boot默认会在底层配好所有的组件。但是如果用户自己配置了以用户的优先

1.为什么不一次全部加载到容器中

如果Spring没有添加任何的附加条件,此时这些配置类中所定义的bean都会被导入到Spring容器中,这样
非常消耗内存,因此在Spring中提供了很多的条件注解,通过这些条件注解控制某一个配置是否生效。

2.简单总结:

在项目启动的时候,Spring Boot框架会自动读取META-INF/spring.factories配置文件中org.springframework.boot.autoconfigure.EnableAutoConfiguration所配置的配置类,然后将其中所定义的bean根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。文章来源地址https://www.toymoban.com/news/detail-594638.html

3.详细总结

  1. 在Spring Boot项目中有一个注解@SpringBootApplication,这个注解是对三个注解进行了封装:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan
    其中@EnableAutoConfiguration是实现自动化配置的核心注解。
  2. 该注解通过@Import注解导入AutoConfigurationImportSelector,这个类实现了一个导入器接口ImportSelector。在该接口中存在一个方法selectImports,
  3. 该方法的返回值是一个数组,数组中存储的就是要被导入到spring容器中的类的全类名。在AutoConfigurationImportSelector类中重写了这个方法,
  4. 该方法内部就是读取了项目的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。
  5. 在这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。

到了这里,关于Spring Boot自动装配原理(易懂)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Spring Boot自动装配原理详解与常见面试题】—— 每天一点小知识

                                                                  💧 S p r i n g B o o t 自动装配原理详解与常见面试题 color{#FF1493}{Spring Boot自动装配原理详解与常见面试题} Sp r in g B oo t 自动装配原理详解与常见面试题 💧           🌷 仰望天空

    2024年02月16日
    浏览(46)
  • spring boot自动装配及自动装配条件判断

    第一步需要在pom.xml文件指定需要导入的坐标 要是没有自动提示需要检查maven有没有 实现代码 执行代码示例

    2024年02月20日
    浏览(39)
  • Spring Boot自动装配

    自动装配是 Spring Boot 最核心的功能之一,第三方可以基于这个特性非常方便的和 Spring 做整合,实现自己的 Starter,做到开箱即用。 Java 早期并不支持注解,所以那会儿 Spring 只能通过 xml 的形式来配置。早期项目里要引入一个功能模块,首先我们要引入 SDK,然后在 xml 里配置

    2024年01月23日
    浏览(46)
  • Spring Boot如何实现自动装配

    Spring Boot的自动装配是它的一大特点,可以大大提高开发效率,减少重复性代码的编写。本文将详细讲解Spring Boot如何实现自动装配。 在传统的Spring框架中,我们需要手动配置和管理Bean的依赖关系,但在Spring Boot中,大量的配置可以自动完成。这是因为Spring Boot中引入了自动装

    2024年02月04日
    浏览(42)
  • 深入了解Spring Boot自动装配

    Spring Boot的自动装配是一项强大的功能,能够简化应用程序的配置和开发过程。让我们通过一系列详细的例子来深入了解这一特性。 在Spring Boot中,自动装配是指框架根据应用程序的依赖关系,自动配置和装配相应的Bean,而无需手动设置。这使得开发者可以更专注于业务逻辑

    2024年01月23日
    浏览(45)
  • 【Spring Boot 源码学习】自动装配流程源码解析(上)

    《Spring Boot 源码学习系列》 上篇博文,笔者带大家从整体上了解了AutoConfigurationImportSelector 自动装配逻辑的核心功能及流程,由于篇幅有限,更加细化的功能及流程详解还没有介绍。本篇开始将从其源码入手,重点解析细化后的自动装配流程源码。 在开始本篇的内容介绍之前

    2024年02月14日
    浏览(41)
  • 【Spring Boot 源码学习】自动装配流程源码解析(下)

    《Spring Boot 源码学习系列》 上篇博文,笔者带大家了解了自动装配流程中有关自动配置加载的流程; 本篇将介绍自动装配流程剩余的内容,包含了自动配置组件的排除和过滤、触发自动配置事件。 在开始本篇的内容介绍之前,我们先来看看往期的系列文章【有需要的朋友,

    2024年02月11日
    浏览(36)
  • 拆解Spring boot:Springboot为什么如此丝滑而简单?源码剖析解读自动装配

    🎉🎉欢迎光临,终于等到你啦🎉🎉 🏅我是苏泽,一位对技术充满热情的探索者和分享者。🚀🚀 🌟持续更新的专栏 《Spring 狂野之旅:从入门到入魔》 🚀 本专栏带你从Spring入门到入魔   这是苏泽的个人主页可以看到我其他的内容哦👇👇 努力的苏泽 http://suzee.blog.csdn

    2024年03月23日
    浏览(44)
  • Spring Boot——Spring Boot自动配置原理

    Spring Boot启动原理 一直在使用Spring Boot特别好奇的是为什么Spring Boot比Spring在项目构建和开发过程中要方便很多,无需编写大量的配置,Spring Boot自动给你配置好了。往往是集成项目依赖之后一键使用。于是小编我就学习和研究了一下Spring Boot的自动配置。 主程序入口示例 :

    2024年02月15日
    浏览(39)
  • Spring Boot自动配置原理

    springboot是基于spring的新型的轻量级框架,最厉害的地方当属**自动配置。**那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置 从上面代码可以看出,Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)最为耀眼,所以要揭开SpringBoot的神秘面纱

    2024年01月19日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包