SpringBoot自动装配原理分析

SpringBoot自动装配原理分析先看看SpringBoot的主配置类:里面有一个main方法运行了一个run()方法,在run方法中必须要传入一个被@SpringBootApplication注解的类。@SpringBootApplicationSpringBoot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就会运行这个类的main方法来启动SpringBoot项目。那@…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

先看看SpringBoot的主配置类:

SpringBoot自动装配原理分析

里面有一个main方法运行了一个run()方法,在run方法中必须要传入一个被@SpringBootApplication注解的类。

@SpringBootApplication

SpringBoot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就会运行这个类的main方法来启动SpringBoot项目。

那@SpringBootApplication注解到底是什么呢,点进去看看:

SpringBoot自动装配原理分析

发现@SpringBootApplication是一个组合注解。

@SpringBootConfiguration

 

先看看@SpringBootConfiguration注解:

SpringBoot自动装配原理分析

这个注解很简单,表明该类是一个Spring的配置类。

再进去看看@Configuration:

SpringBoot自动装配原理分析

说明Spring的配置类也是Spring的一个组件。

@EnableAutoConfiguration

这个注解是开启自动配置的功能。

SpringBoot自动装配原理分析

先看看@AutoConfigurationPackage注解:

SpringBoot自动装配原理分析

这个注解是自动配置包,主要是使用的@Import来给Spring容器中导入一个组件 ,这里导入的是Registrar.class。

来看下这个Registrar:

SpringBoot自动装配原理分析

就是通过这个方法获取扫描的包路径,可以debug看看:

在这行代码上打了一个断点:

SpringBoot自动装配原理分析

启动项目:

进入断点处:

SpringBoot自动装配原理分析

看看能否获取扫描的包路径:

SpringBoot自动装配原理分析

已经获取到了包路径:

SpringBoot自动装配原理分析

那那个metadata是什么呢:

可以看到是标注在@SpringBootApplication注解上的DemosbApplication,也就是我们的主配置类:

SpringBoot自动装配原理分析

说白了就是将主配置类(即@SpringBootApplication标注的类)的所在包及子包里面所有组件扫描加载到Spring容器。所以包名一定要注意。

现在包扫描路径获取到了,那具体加载哪些组件呢,看看下面这个注解。

@Import({AutoConfigurationImportSelector.class})

SpringBoot自动装配原理分析

@Import注解就是给Spring容器中导入一些组件,这里传入了一个组件的选择器:AutoConfigurationImportSelector。

里面有一个selectImports方法,将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中。

SpringBoot自动装配原理分析

debug运行看看:

会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件:

SpringBoot自动装配原理分析

SpringBoot自动装配原理分析

有了自动配置类,免去了我们手动编写配置注入功能组件等的工作。

那他是如何获取到这些配置类的呢,看看上面这个方法:

SpringBoot自动装配原理分析

SpringBoot自动装配原理分析

SpringBoot自动装配原理分析

会从META-INF/spring.factories中获取资源,然后通过Properties加载资源:

SpringBoot自动装配原理分析Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作。以前我们需要自己配置的东西,自动配置类都帮我们完成了。

SpringBoot自动装配原理分析

J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-2.0.3.RELEASE.jar:

SpringBoot自动装配原理分析

SpringBoot自动装配原理分析

比如看看WebMvcAutoConfiguration:

都已经帮我们配置好了,我们不用再单独配置了:

SpringBoot自动装配原理分析

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/171441.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 简单页面+java后台+数据库,实现从页面对数据库的增删改查

    简单页面+java后台+数据库,实现从页面对数据库的增删改查在实现简单网页上对数据内容进行增删改查,需要用到三个部分,分别是jsp网页部分+java后台部分+数据库表我用一个新闻的例子来实现,首先编写java后台程序java后台程序:我们用三层的模式进行设计:分别是servlet,service,dao层,并且建立个实体包用来打包数据库和后台要用到的属性截个图首先是写功能写的顺序分别是从servlet,service,dao层…

    2022年5月22日
    33
  • 水晶报表动态显示小数点后的位数(去掉多余的0)

    水晶报表动态显示小数点后的位数(去掉多余的0)

    2021年9月1日
    54
  • mybatiscodehelperpro激活码【2021.10最新】

    (mybatiscodehelperpro激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月28日
    985
  • NSGA2 Matlab toolbox

    NSGA2 Matlab toolbox最近做数模,偶然间发现这个算法,还在学习中,下面转载下资料。NSGA-II是一个很成熟的多目标优化算法了。根本原理还是Patero最优问题。NSGA-IImatlab代码,网上比较有名的是AravindSeshadri写的,采用的是BSD许可证。它的程序可以在http://www.mathworks.com/matlabcentral/fileexchange/10

    2022年5月19日
    69
  • JAVA编程之第一个程序HelloWorld「建议收藏」

    JAVA编程之第一个程序HelloWorld「建议收藏」提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档JAVA第一个程序HelloWorld工程创建一、创建项目1.新建工程:File->New->JavaProject2.创建程序包:src->new->package2.创建类:package->new->class二、编写第一个程序HelloWorld1.HelloWorld三、遇到问题1.ModuleJava_Learningnotfound1.1错误信息1.2错误原因1.3解决方法2.

    2022年7月7日
    21
  • QcustomPlot 多条单条曲线光标自动更随的实现

    QcustomPlot 多条单条曲线光标自动更随的实现QcustomPlot光标跟随最近有一个需求是能绘制多条曲线且能光标跟随,上网搜了很多相关的资料,如下边这个博客中查到了鼠标更随的相关代码,他的图如下所示——[原文链接地址](https://blog.csdn.net/sunnyloves/article/details/82344815)还有一篇如下所示——[原文链接地址](https://www.cnblogs.com…

    2022年10月16日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号