首页 > 其他分享 >springboot自动装配过程

springboot自动装配过程

时间:2023-05-10 18:11:06浏览次数:42  
标签:装配 java springboot 指定 Bean 自动 方法

一、首先要知道springboot的启动类

在这里插入图片描述

然后知道启动类有一个重要的注解:@SpringBootApplication

然后跟踪查看,它是由@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan注解组成的

@SpringBootConfiguration作用是声明当前类是一个组件
@ComponentScan作用是扫描启动类包下面的所有组件
@EnableAutoConfiguration作用是自动装配所有的bean

@EnableAutoConfiguration源码追踪

可以看到导入啦自动装配的类@Import(AutoConfigurationImportSelector.class)
在这里插入图片描述
然后进一步看它实现啦这个接口DeferredImportSelector.java,
并且重写String[] selectImports(AnnotationMetadata annotationMetadata)方法:

在这里插入图片描述
在这里插入图片描述

再看接口DeferredImportSelector.java继承了ImportSelector.java接口,然而ImportSelector接口有一个重要的方法String[] selectImports(AnnotationMetadata importingClassMetadata);它正好是上面AutoConfigurationImportSelector.java重写过的方法
在这里插入图片描述
在这里插入图片描述
那么我们回过头来看这个重写的方法,方法体有获取自动自动装配的方法
getAutoConfigurationEntry(annotationMetadata),再看这个方法中调用啦返回应考虑的自动配置类名称getCandidateConfigurations(annotationMetadata, attributes);在这里插入图片描述

继续追代码调用SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),
getBeanClassLoader());
在这里插入图片描述
继续追代码:调用这个方法loadSpringFactories
在这里插入图片描述
继续追代码:加载了配置类的资源META-INF/spring.factories
在这里插入图片描述
在这里插入图片描述
继续查看这个资源
在这里插入图片描述
这下面能被扫描到资源,按照要开启自动装配,并且在类路径中存在bean就会被装载
在这里插入图片描述
例如:jdbc下面的包DataSourceAutoConfiguration.java
在这里插入图片描述
它会自动扫描properties文件或者yml文件,根据文件下你设置的数据库配置自动装配
在这里插入图片描述
注意:理解一下这几个注解
@ConditionalOnBean:当容器里有指定 Bean 的条件下
@ConditionalOnMissingBean:当容器里没有指定 Bean 的情况下
@ConditionalOnSingleCandidate:当指定 Bean 在容器中只有一个,或者虽然有多个但是指定首选 Bean
@ConditionalOnClass:当类路径下有指定类的条件下
@ConditionalOnMissingClass:当类路径下没有指定类的条件下
@ConditionalOnProperty:指定的属性是否有指定的值
@ConditionalOnResource:类路径是否有指定的值
@ConditionalOnExpression:基于 SpEL 表达式作为判断条件
@ConditionalOnJava:基于 Java 版本作为判断条件
@ConditionalOnJndi:在 JNDI 存在的条件下差在指定的位置
@ConditionalOnNotWebApplication:当前项目不是 Web 项目的条件下
@ConditionalOnWebApplication:当前项目是 Web 项 目的条件下

关注我的公众号SpaceObj 领取idea系列激活码

标签:装配,java,springboot,指定,Bean,自动,方法
From: https://www.cnblogs.com/zhanghongrui/p/17388852.html

相关文章

  • springboot+Prometheus+grafana 实现自定义监控(请求数、响应时间、JVM性能)
    自定义监控1.SpringBoot工程集成Micrometer1.1引入依赖1.2配置1.3监控jvm信息1.4创建自定义监控1.5添加具体业务代码监控2.集成Prometheus2.1安装2.2集成配置3.使用GrafanaDashboard展示监控项3.1安装grafana3.2配置prometheus数据源3.3增加jvm面板3.4配置业务接口监控面板......
  • 图片自动编号
    实现图片自动编号分两步:第一步,将标题插入样式链接,可以理解成给自己的标题安装一个定位点,这里我们多数时候用的都是章节的序号进行图编号,因此只需要修改大章节的编号即可。注意,有时候虽然我们用了样式库里面的标题1标题2,但其实我们并没有定位点具体操作参考:(24条消息)论文图表自......
  • web自动化测试框架封装
    一、创建基本架构--core  #框架核心代码--logs #日志文件--report #测试报告--temps  #临时文件夹--testcase #测试用例--main.py  #框架启动入口--pytest.ini  #框架配置文件--requirements.txt  #第三方依赖清单--conftest.py  #全局夹具--R......
  • 【SpringBoot】【自动装配】 SpringBoot自动装配原理
    1 前言我们都知道SpringBoot有个自动装配的机制,那你们知道平时如何使用么,以及他是什么时候执行的么,那么本节我们就来看看。2  为什么要有自动装配我们经历过SSM时期的时候,比如要引进Redis,是不是要先要导Maven依赖,还要进行大量的配置Bean,然后才能使用,而使用SpringBoot的......
  • java读取文件——以自动贩卖机为例
    上一篇做自动售卖机时用的是初始化定义商品列表,但实际上每一次启动售货机时售货机显示的是上一次购买结束后的库存。我们用一个.txt记录一下库存,然后利用File类将数据读取出来展示。我这里设置了一个商品就为一行,名称占12个字节,价格是4个字节,数量是11个字节,再加上转行符读取文......
  • springboot 项目中返回前端对象错误显示是string格式
    原因是返回json对象后面跟了一段,如下图这个错误藏的比较隐蔽,有个小的对象没有实现getter方法。在返回前端对象里,所有对象都得可以序列化和反序列化,对应的对象中所有属性是否都实现getter和setter等序列化。......
  • SpringBoot 配置文件加载优先级
    我们在使用springboot开发的时候,经常会从外部获取属性值,为了记住这些规则,特此做如下记录~~~一、为什么要做外部化配置本地开发的时候,上传文件的时候,每个人想上传的路径不一样,使用外部配置,就可以单独设置自己的上传路径项目部署的时候,不同的环境使用不同的配置,使用外部挂载配置这......
  • Windows下安装Redis,并设置开机自动启动
    这篇文章是在Windows上安装redis,关于如何在Linux上安装redis可以参看Redis下载地址:https://github.com/tporadowski/redis/releases1.下载redis,并解压2.打开cmd命令行进入redis文件夹下,输入如下命令redis-server.exeredis.windows.conf 3.打开一个新的cmd,输入命令redis-serve......
  • 软件开机自动运行
    1.点击开始菜单->程序,找到“启动”,点键点它,选择“打开”。2.将需要启动和软件的快捷方式拖(或复制)到“启动”文件夹里即可。备注:如果你安装了360安全卫士的话,会弹出一个对话框提示你“一个未知的系统启动项正在被装入”,允许即可。......
  • 直播网站源码,安卓防止输入框自动弹出
    直播网站源码,安卓防止输入框自动弹出可以在edittext的父布局结构中(例如LinearLayout,RelativeLayout等)添加  android:focusable="true" android:focusableInTouchMode="true"​以上就是直播网站源码,安卓防止输入框自动弹出,更多内容欢迎关注之后的文章 ......