首页 > 其他分享 >springboot 自动装配的原理

springboot 自动装配的原理

时间:2023-04-30 18:11:51浏览次数:33  
标签:装配 容器 springboot 自动 注解 组件 原理

 自动装配原理

问题就是为什么我们直接导入依赖就可以使用了,甚至不用配置web.xml,tomcat等,springboot内部是如何实现的?

主启动类上的注解@SpringBootApplication里有三个重要注解

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan

1.@SpringBootConfiguration

这个注解的源码是@Configuration:表示该类为主配置类,可用来装配bean,进一步@Configuration的源码是@Component,说明Spring的配置类也是Spring的一个组件,

SpringBoot本质上就是一个Spring应用,通过这个注解来加载IOC容器的配置。所以在启动类里面标注了@Configuration,意味着它也是一个IOC容器的配置类

 2.@ComponentScan

这个注解作用是扫描配置类下所有包的类,等价于SSM框架整合中springmvc.xml下的:

<context:component-scan base-package="com.lian.controller"/>

3.@EnableAutoConfiguration(重点)

该注解源码包含两个重要注解

first :@AutoConfigurationPackage:自动配置包

作用:给Spring容器中导入一个Registrar注册器组件,这个注解和@ComponentScan有类似作用,也是将主配置类所在的包及其子包里面的组件扫描到IOC容器中,但是区别是:

@AutoConfigurationPackage会扫描@Enitity、@MapperScan等第三方依赖的注解
@ComponentScan只扫描@Controller/@Service/@Component/@Repository这些常见注解。所以这两个注解扫描的对象是不一样的。

second:@Import(核心):

作用:通过import导入第三方提供的bean的配置类:AutoConfigurationImportSelector:给容器中导入组件,该类下的方法:getCandidateConfigurations(AnnotationMetadata metadata,AnnotationAttributes attributes)作用是获取所有的配置

重点关注

其一

getSpringFactoriesLoaderFactoryClass()顾名思义能够返回spring自动装配的容器

其二

SpringFactoriesLoader.loadFactoryNames的方法读取项目资源和系统资源,从这些资源中遍历了所有的nextElement(自动装配),遍历完成后,封装为properties供我们使用
3个注解需要关注的所有类和方法:

 注意点:所有的自动装配类都放在了spring.factories下:

 

所有的类并不是都生效的,只要导入了对应start核心注解:@ConditionalOnxx,这样自动装配类才能生效才能生效

 

总结:springboot自动装配通过三大注解完成,在spring.factories中保存了所有的自动装配类,只有拥有注解@ConditionalOnxx的类才拥有启动器,有了启动器才能实现自动装配,才能配置成功。

1.springboot在启动时,从类路径下/META-INF/spring.factories获得指定的值;

2.将这些自动装配成功的类导入IOC容器,自动装配即生效

3.springboot会把所有需要的组件导入,以类名的方式将这些组件添加到容器

4.容器中会存在非常多的xxxAutoConfiguration的文件(@Bean),就是这些类给容器中导入了这个场景需要的所有组件,并自动装配

5.有了自动装配类,我们就不用再手写配置文件了

 

我的理解:自动装配类实现了我们之前手写的配置文件的内容以及配置文件之间的关联

有个小疑问:我在vue才刚接触到组件这个概念,之前ssm和springmvc印象都没有听过,为什么springboot会说到组件,是结合了前端的一些东西吗??

这个疑问我学几天后再反过来看。

 

标签:装配,容器,springboot,自动,注解,组件,原理
From: https://www.cnblogs.com/MyBlogs-joyiyii/p/17365562.html

相关文章

  • JSP 的本质原理解析:"编写的时候是JSP,心里想解读的是 java 源码"
    JSP的本质原理解析:"编写的时候是JSP,心里想解读的是java源码"@目录JSP的本质原理解析:"编写的时候是JSP,心里想解读的是java源码"每博一文案1.JSP概述2.第一个JSP程序3.JSP的本质就是Servlet4.JSP的基础语法4.1在JSP文件中直接编写文字4.2在JSP中编写Java程序......
  • HTTPS原理详解
    HTTPS(全称:HypertextTransferProtocoloverSecureSocketLayer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容请看SSL。它是一个URIscheme(抽象标识符体系),句法类同http:体系。用于安全的HTTP数据传输。https:URL......
  • 《编译原理》第一次实验:词法分析
    该分类为本人在本学期《编译原理》课程上的实验报告,实验对象语言为教学用PL/0语言,实验所用语言为C++。全部报告仅供参考,如有缺漏或错误,烦请指出,Thanks♪(・ω・)ノ一.设计思想根据PL/0语言的文法规范,编写PL/0语言的词法分析程序。1.单词种类及其正规式(1)基本字单词的值单......
  • 万能修改串号imei软件技术原理
    在智能手机用户中,有一些人因为特定需求需要修改手机串号,例如解锁手机、绕过应用程序检测等。而万能修改串号IMEI软件成为了其中的一种解决方案。那么,这种技术的原理是什么呢?首先,我们需要了解万能修改串号IMEI软件的基本原理。IMEI是手机的唯一标识符,由15位数字组成。当手机......
  • 改手机串号技术原理能绕过APP检测
    随着智能手机的普及,应用程序的数量和种类也在不断增加。不同的应用程序可能需要不同的硬件和软件支持,导致一些应用程序无法在所有手机上运行。于是,一些用户开始探索绕过应用程序检测的方法,以使用这些应用程序。其中一个方法是修改手机串号。那么,改手机串号技术原理是否能够......
  • 安卓一键改串号免root技术原理
    在智能手机用户中,有一部分人因为种种原因需要改变手机串号,比如解锁手机、绕过应用程序检测等。然而,传统的修改串号方法需要root权限,对普通用户来说比较困难。近年来,出现了一些安卓一键改串号免root技术,让用户可以更方便地修改手机串号。那么,这种技术的原理是什么呢?首先,我们......
  • ActiveMQ学习(二)——MQ的工作原理…
    如图所示首先来看本地通讯的情况,应用程序A和应用程序B运行于同一系统A,它们之间可以借助消息队列技术进行彼此的通讯:应用程序A向队列1发送一条信息,而当应用程序B需要时就可以得到该信息。其次是远程通讯的情况,如果信息传输的目标改为在系统B上的应用程序C,这种变化不会对应用程序A......
  • 修改手机串号技术原理犯法吗
    随着智能手机的普及和功能的不断增强,越来越多的人开始依赖手机处理日常事务和娱乐活动。然而,一些用户可能会发现自己的手机无法使用某些功能,或者受到特定运营商的限制。于是,一些用户开始探索修改手机串号的方法,以解除这些限制。但是,这个做法是否犯法呢?首先,我们需要了解修改......
  • 手机串号修改技术原理
    随着现代技术的不断发展,手机串号(IMEI号)修改技术越来越普及,这种技术让许多用户可以使用多张手机卡在同一台手机上。手机串号修改技术的原理是什么呢?在这篇文章中,我们将深入探讨手机串号修改技术的原理和相关问题。首先,什么是手机串号(IMEI号)?手机串号是手机的唯一识别码,由15位数字组......
  • 手机串号 有什么用?串号是什么技术原理
    手机串号是指手机的国际移动设备身份码(IMEI),是一串15位数字,每台手机都有唯一的一个串号。手机串号可以用来跟踪手机的使用情况,防止手机被盗或丢失后被他人使用。手机串号可以在手机拨打*#06#后显示出来,也可以在手机后盖上找到。除了IMEI之外,还有其他的一些类似的串号,如MEID、ESN和......