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)
上一篇 2022年8月21日 下午10:46
下一篇 2022年8月21日 下午11:00


相关推荐

  • winform webform 简单高效的UI界面框架

    winform webform 简单高效的UI界面框架一 winform 的界面框架设计 james lx 一直以来 我都在寻找 WINFORM 程序 简单高效的界面框架 终于 我有了一个 在此分享给和我一样使用 C 而苦于界面设计的人 我的发现中 并没有加入什么框架和代码 只是使用原生的控件一种组合 这种组合满足我简单高效而且灵和的开发需求 1 界面最外层 我放了一个 Tabcontrol 控件 这个可以把程序功能按大类区分开来 2 在

    2026年3月20日
    2
  • IP地址的分类及范围

    IP地址的分类及范围详解:A、B、C、D、E五类是如何划分的?大家都知道现在的互联网使用的是32位地址,IPv6虽然也说了好些年,但大家都习惯接受IPv4的用法说法。IP以点分十进制表示,如172.16.0.0。地址格式为:IP地址=网络地址+主机地址或IP地址=主机地址+子网地址+主机地址。IP地址类型最初设计互联网络时,为了便于寻址以及层次化构造网络…

    2022年4月5日
    140
  • threadlocal详解_thread local

    threadlocal详解_thread localC#中,Thread类有一个IsBackground的属性.MSDN上对它的解释是:获取或设置一个值,该值指示某个线程是否为后台线程。个人感觉这样的解释等于没有解释..Net中的线程,可以分为后台线程和前台线程。后台线程与前台线程并没有本质的区别,它们之间唯一的区别就是:后台线程不会防止应用程序的进程被终止掉。呵呵,这句话读出来好像并不那么好懂.其实,说白了就是当前台线程都结束了的时候,整个…

    2022年10月17日
    7
  • 2017JAVA面试题附答案

    2017JAVA面试题附答案声明 本人能力有限 只是列出来参考 不对之处欢迎指正 JAVA 基础 JAVA 中的几种基本类型 各占用多少字节 下图单位是 bit 非字节 1B 8bitString 能被继承吗 为什么 不可以 因为 String 类有 final 修饰符 而 final 修饰的类是不能被继承的 实现细节不允许改变 平常我们定义的 Stringstr a 其实和 Stringstr n

    2026年3月19日
    1
  • java-多态

    java-多态

    2021年9月29日
    50
  • MySql中的longtext字段的返回问题「建议收藏」

    MySql中的longtext字段的返回问题「建议收藏」最近开发中用到了longtext这种字段。在mysql中该字段的最大长度为4G如下图所示开发中遇到的一个问题就是。例如有个article表,然后我们的页面要将数据以列表的形式展示到前端(只显示几个字段,如作者,标题等等,例如放到table中显示多条记录),但是是将该表中的所有信息都查出来,然后当用户点击某条记录的时候,会跳到详情页,在显示出详细的信息。这样当数据量比较多的时候,或者文本…

    2022年5月15日
    37

发表回复

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

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