@SpringBootApplication剖析

news2024/12/29 16:51:15

一、前言

在SpringBoot项目中启动类必须加一个注解@SpringBootApplication,今天我们来剖析@SpringBootApplication这个注解到底做了些什么。

二、@SpringBootApplication简单分析

进入@SpringBootApplication源代码如下:

可以看出@SpringBootApplication是一个复合注解,里边主要组合了

@SpringBootConfiguration、@CompoentScan、@EnableAutoConfiguration这三个注解。

1、@SpringBootConfiguration

@SpringBootConfiguration组合了@Configuration,它是用来声明当前类是一个配置类,被注解类的内部包含一个或多个@Bean注解的方法,用于替换xml配置定义,这些方法将被

AnnotationConfigApplicationContext类进行扫描,注入Spring容器中。

简单例子:直接使用@Configuration和@Bean来注入容器。

(1)创建一个普通项目,引入依赖

implementation 'org.springframework:spring-context:5.1.9.RELEASE'

2)创建一个Configuration类 ,定义Bean对象。

@Configuration @Bean相当于

<beans>

    <bean id="user" class="org.example.User"></bean>

</beans>

的定义。

(3)测试类

通过AnnotationConfigApplicationContext将定义的Bean加载到Spring IOC容器中。

输出如下:

注:AnnotationConfigApplicationContext最终会调用BeanDefinitionReaderUtils.registerBeanDefinition进行注入。

2、@CompoentScan

定义一个Spring Bean是在类上加上注解@Service、@Controller、@Compent就可以,而Spring是通过扫描@CompoentScan指定包下所有加了注解的类,如果不写它只会加载启动类所在的包及下级包。

简单例子:

(1)、在包com.example.sacn新建一个类

(2)、在包com.example.app下创建一个启动类

(3)、输出找不到对应的Bean

(4)、启动类加注解,运行正常

@ComponentScan("com.example.scan")

具体源代码在

ComponentScanAnnotationParser.parse()会将所有标注了@Component并匹配@ComponentScan规则的类都注册到容器中去,@Controller、@Service、@Responsitory都标有@Conpoment注解。

3、@EnableAutoConfiguration

@EnableAutoConfiguration是SpringBoot实现自动化配置的核心注解,通过这个注解把Spring应用所需的bean注入到容器中。

@EnableAutoConfiguration通过@Import注入一个ImportSelector的实现类AutoConfigurationImportSelector,这个类根据我们的配置动态加载所需要的Bean。

核心代码如下:

注:主要完成过滤筛选需要注入的类。

催着吃钣了!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1062800.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【C语言】动态通讯录(超详细)

通讯录是一个可以很好锻炼我们对结构体的使用&#xff0c;加深对结构体的理解&#xff0c;在为以后学习数据结构打下结实的基础 这里我们想设计一个有添加联系人&#xff0c;删除联系人&#xff0c;查找联系人&#xff0c;修改联系人&#xff0c;展示联系人&#xff0c;排序这几…

数据挖掘(3)特征化

从数据分析角度&#xff0c;DM分为两类&#xff0c;描述式数据挖掘&#xff0c;预测式数据挖掘。描述式数据挖掘是以简介概要的方式描述数据&#xff0c;并提供数据的一般性质。预测式数据挖掘分析数据建立模型并试图预测新数据集的行为。 DM的分类&#xff1a; 描述式DM&#…

arm代码

RISC精简指令集 长度和执行周期固定 长度为一条机器指令在计算机占用的内存大小 指令周期为CPU执行一条机器指令所发费的时间(时钟周期由CPU工作频率决定) CISC复杂指令集 其架构一般用于PC端 X86和X64都是负载指令集CPU 更注重指令的功能性 指令周期和长度都不固定 ar…

014-第二代软件开发

第二代软件开发 文章目录 第二代软件开发项目介绍正式开始我们的Debian Qt 软件开发主题色QSS U盘检测QFileSystemWatcher 屏幕键盘LibUSB 使用 总结 关键字&#xff1a; Qt、 Qml、 U盘检测、 屏幕键盘、 LibUSB 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这…

Qt 综合练习小项目--反金币(2/2)

目录 4 选择关卡场景 4.2 背景设置 4.3 创建返回按钮 4.3 返回按钮 4.4 创建选择关卡按钮 4.5 创建翻金币场景 5 翻金币场景 5.1 场景基本设置 5.2 背景设置 5.3 返回按钮 5.4 显示当前关卡 5.5 创建金币背景图片 5.6 创建金币类 5.6.1 创建金币类 MyCoin 5.6.…

GPT系列论文解读:GPT-2

GPT系列 GPT&#xff08;Generative Pre-trained Transformer&#xff09;是一系列基于Transformer架构的预训练语言模型&#xff0c;由OpenAI开发。以下是GPT系列的主要模型&#xff1a; GPT&#xff1a;GPT-1是于2018年发布的第一个版本&#xff0c;它使用了12个Transformer…

JavaEE 网络原理——TCP的工作机制(中篇 三次握手和四次挥手)

文章目录 一、TCP 内部工作机制——连接管理1. 连接(三次握手)(1).有连接和确认应答之间的关系(2). 通过客户端和服务器详细描述三次握手 2. 断开连接(四次挥手)(1)讨论“四次握手”中间步骤的合并问题。(2) 根据简单的 TCP 代码解释断开连接(3) 四次挥手中的两个重要的 TCP 状…

计算机网络-计算机网络体系结构-物理层

目录 一、通信基础 通信方式 传输方式 码元 传输率 *二 准则 2.1奈氏准则(奈奎斯特定理) 2.2香农定理 三、信号的编码和调制 *数字数据->数字信号 数字数据->模拟信号 模拟数据->数字信号 模拟数据->模拟信号 *四、数据交换方式 电路交换 报文交换…

【刷题笔记10.5】LeetCode:排序链表

LeetCode&#xff1a;排序链表 一、题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 二、分析 这题咱们默认要求&#xff1a;空间复杂度为O(1)。所以这把咱们用自底向上的方法实现归并排序&#xff0c;则可以达到O(1) 的空间复杂…

[极客大挑战 2019]FinalSQL - 异或盲注

1、这题的关键是找注入点&#xff0c;如果选择用户名、密码作为输入点就麻烦了 2、注入点&#xff1a;按钮&#xff0c;点击就传id&#xff1b;当id1时&#xff0c;提示Click others   可以利用id的特性&#xff0c;构造异或匹配   payload: f"1^(ord(substr((select…

nodejs+vue中医体质的社区居民健康管理系统elementui

可以实现首页、中医体质量表、健康文章、健康视频、我的等&#xff0c;在我的页面可以对医生、小区单元、医疗药品等功能进行操作。目前主要的健康管理系统是以西医为主&#xff0c;而为了传扬中医文化&#xff0c;提高全民健康意识&#xff0c;解决人民日益增长的美好生活需要…

基于SpringBoot的图书进销存管理系统

目录 前言 一、技术栈 二、系统功能介绍 用户信息管理 图书类型管理 商品退货管理 客户信息管理 图书添加 客户添加 应收金额 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实…

Ubuntu无法引导启动的修复

TLDR&#xff1a;使用Boot-Repair工具。 Boot-Repair Boot-Repair是一个简单的工具&#xff0c;用于修复您在Ubuntu中可能遇到的常见启动问题&#xff0c;例如在安装Windows或其他Linux发行版后无法启动Ubuntu时&#xff0c;或者在安装Ubuntu后无法启动Windows时&#xff0c;…

[CISCN 2019华北Day2]Web1 - 布尔盲注

考点&#xff1a;布尔盲注【注意&#xff0c;sql中的substr初始位置是1不是0】 1、页面提示用id传参&#xff0c;而且我们发现是post传参 2、我们传了id1后提示“Hello, glzjin wants a girlfriend.“ 3、由于这题直接输入查询字符&#xff0c;可以通过字典爆破过滤&#xff0…

深度学习基础之参数量(3)

一般的CNN网络的参数量估计代码 class ResidualBlock(nn.Module):def __init__(self, in_planes, planes, norm_fngroup, stride1):super(ResidualBlock, self).__init__()print(in_planes, planes, norm_fn, stride)self.conv1 nn.Conv2d(in_planes, planes, kernel_size3, …

人机关系不是物理关系也不是数理关系

人机关系是一种复杂的社会技术系统&#xff0c;涉及到人类和机器、环境之间的相互作用和影响。它不仅限于物理接触和数理规律&#xff0c;同时还包括了思维、情感、意愿等方面的交流和互动。在人机关系中&#xff0c;人类作为使用者和机器作为工具&#xff08;将来可能会上升到…

rust入门一:安装 Hello World

环境&#xff1a; window 11 专业版rust 1.72.1 一、下载安装 直接去官网&#xff1a; https://www.rust-lang.org/tools/install 下载完成后如下&#xff1a; 双击运行一步步安装就行。 如果是更新或卸载&#xff0c;在命令行中运行&#xff1a; rustup update&#xff1a…

ChatGPT基础使用总结

文章目录 一、ChatGPT基础概念大型语言模型LLMs---一种能够以类似人类语言的方式“说话”的软件ChatGPT定义---OpenAI 研发的一款聊天机器人程序&#xff08;2022年GPT-3.5&#xff0c;属于大型语言模型&#xff09;ChatGPT4.0---OpenAI推出了GPT系列的最新模型ChatGPT典型使用…

[GXYCTF2019]禁止套娃 无回显 RCE 过滤__FILE__ dirname等

扫除git 通过githack 获取index.php <?php include "flag.php"; echo "flag在哪里呢&#xff1f;<br>"; if(isset($_GET[exp])){if (!preg_match(/data:\/\/|filter:\/\/|php:\/\/|phar:\/\//i, $_GET[exp])) {if(; preg_replace(/[a-z,_]\(…

DevicData-D-XXXXXXXX勒索病毒数据恢复|金蝶、用友、管家婆、OA、速达、ERP等软件数据库恢复

引言&#xff1a; 在数字时代&#xff0c;数据安全成为一项至关重要的挑战。DevicData-D-XXXXXXXX勒索病毒&#xff08;以下简称DevicData病毒&#xff09;是这场战斗中的新敌人&#xff0c;它能够以毁灭性的方式加密您的数据&#xff0c;迫使您在数据和时间之间做出艰难的选择…