当前位置: 首页 > news >正文

@SpringBootApplication剖析

一、前言

在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。

核心代码如下:

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

催着吃钣了!

相关文章:

@SpringBootApplication剖析

一、前言 在SpringBoot项目中启动类必须加一个注解SpringBootApplication&#xff0c;今天我们来剖析SpringBootApplication这个注解到底做了些什么。 二、SpringBootApplication简单分析 进入SpringBootApplication源代码如下&#xff1a; 可以看出SpringBootApplication是…...

浅谈wor2vec,RNN,LSTM,Transfermer之间的关系

浅谈wor2vec&#xff0c;RNN&#xff0c;LSTM&#xff0c;Transfermer之间的关系 今天博主谈一谈wor2vec&#xff0c;RNN&#xff0c;LSTM&#xff0c;Transfermer这些方法之间的关系。 首先&#xff0c;我先做一个定位&#xff0c;其实Transfermer是RNN&#xff0c;LSTM&…...

【11】c++设计模式——>单例模式

单例模式是什么 在一个项目中&#xff0c;全局范围内&#xff0c;某个类的实例有且仅有一个&#xff08;只能new一次&#xff09;&#xff0c;通过这个唯一的实例向其他模块提供数据的全局访问&#xff0c;这种模式就叫单例模式。单例模式的典型应用就是任务队列。 为什么要使…...

深度学习-卷积神经网络-AlexNET

文章目录 前言1.不同卷积神经网络模型的精度2.不同神经网络概述3.卷积神经网络-单通道4.卷积神经网络-多通道5.池化层6.全连接层7.网络架构8.Relu激活函数9.双GPU10.单GPU模型 1.LeNet-52.AlexNet1.架构2.局部响应归一化&#xff08;VGG中取消了&#xff09;3.重叠/不重叠池化4…...

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

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

<html dir=ltr>是什么意思?

<html dirltr>的意思是&#xff1a; 文字默认从左到右排列 说明&#xff1a; HTML--超级文本标记语言 dir 属性 -- (文字的)排列方式属性 取值&#xff1a; ltr -- 代表左到右的排列方式 rtl -- 代表右到左的排列方式 默认值:ltr 示例&#xff1a; ltr左到右的对…...

工厂模式:简化对象创建的设计思想 (设计模式 四)

引言 在软件开发中&#xff0c;我们经常需要创建各种对象实例来满足不同的需求。通常情况下&#xff0c;我们会使用new关键字直接实例化对象&#xff0c;但这种方法存在一些问题&#xff0c;比如对象的创建逻辑分散在代码中&#xff0c;难以维护和扩展&#xff0c;同时也违反了…...

【2023最新】微信小程序中微信授权登录功能和退出登录功能实现讲解

文章目录 一、讲解视频二、小程序前端代码三、后端Java代码四、备注 一、讲解视频 教学视频地址&#xff1a; 视频地址 二、小程序前端代码 // pages/profile/profile.js import api from "../../utils/api"; import { myRequest } from "../../utils/reques…...

复习 --- C++运算符重载

.5 运算符重载 运算符重载概念&#xff1a;对已有的运算符重新进行定义&#xff0c;赋予其另外一种功能&#xff0c;以适应不同的数据类型 4.5.1 加号运算符重载 作用&#xff1a;实现两个自定义数据类型相加的运算 1 #include<iostream>2 using namespace std;3 /…...

复习 --- select并发服务器

selectIO多路复用并发服务器&#xff0c;是通过轮询检测文件描述符来实现并发 将内核要检测文件描述符放入集合中&#xff0c;调用select函数&#xff0c;通知内核区检测文件描述符集合中的文件描述符是否准备就绪&#xff0c;即对应的空间中是否有数据 对准备就绪的文件描述…...

程序三高的方法

程序三高的方法 目录概述需求&#xff1a; 设计思路实现思路分析1.1&#xff09;高并发 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,make a better result,wait for change,c…...

全志ARM926 Melis2.0系统的开发指引⑦

全志ARM926 Melis2.0系统的开发指引⑦ 编写目的11. 调屏11.1. 调屏步骤简介11.1.1. 判断屏接口。11.1.2. 确定硬件连接。11.1.3. 配置显示部分 sys_config.fex11.1.3.1. 配置屏相关 IO 11.1.4. Lcd_panel_cfg.c 初始化文件中配置屏参数11.1.4.1. LCD_cfg_panel_info11.1.4.2. L…...

全志ARM926 Melis2.0系统的开发指引⑧

全志ARM926 Melis2.0系统的开发指引⑧ 编写目的12.5. 应用程序编写12.5.1. 简单应用编写12.5.1.1. 注册应用12.5.1.2. 创建管理窗口12.5.1.3. 实现管理窗口消息处理回调函数12.5.1.4. 创建图层12.5.1.5. 创建 framewin12.5.1.6. 实现 framewin 消息处理回调函数 -. 全志相关工具…...

区别对比表:阿里云轻量服务器和云服务器ECS对照表

阿里云轻量应用服务器和云服务器ECS区别对照表&#xff0c;一看就懂的适用人群、使用场景、优缺点、使用限制、计费方式、网路和镜像系统全方位对比&#xff0c;阿里云服务器网分享ECS和轻量应用服务器区别对照表&#xff1a; 目录 轻量应用服务器和云服务器ECS区别对照表 轻…...

【做题笔记】多项式/FFT/NTT

HDU1402 - A * B Problem Plus 题目链接 大数乘法是多项式的基础应用&#xff0c;其原理是将多项式 f ( x ) a 0 a 1 x a 2 x 2 a 3 x 3 ⋯ a n x n f(x)a_0a_1xa_2x^2a_3x^3\cdotsa_nx^n f(x)a0​a1​xa2​x2a3​x3⋯an​xn中的 x 10 x10 x10&#xff0c;然后让大数的…...

网课搜题 小猿题库多接口微信小程序源码 自带流量主

多接口小猿题库等综合网课搜题微信小程序源码带流量主&#xff0c;网课搜题小程序, 可以开通流量主赚钱 搭建教程1, 微信公众平台注册自己的小程序2, 下载微信开发者工具和小程序的源码3, 上传代码到自己的小程序 源码下载&#xff1a;https://download.csdn.net/download/m0_…...

centos安装conda python3.10

最新版本的conda自带python3.10,直接安装即可。 手动创建一个conda文件夹&#xff0c;进入该文件夹&#xff0c;然后执行以下操作步骤。 1.下载 curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh2.安装 sh Miniconda3-latest-Linux-x86_64.…...

解密京东面试:如何应对Redis缓存穿透?

亲爱的小伙伴们&#xff0c;大家好&#xff01;欢迎来到小米的微信公众号&#xff0c;今天我们要探讨一个在面试中可能会遇到的热门话题——Redis缓存穿透以及如何解决它。这个话题对于那些渴望进入技术领域的小伙伴们来说&#xff0c;可是必备的哦&#xff01; 认识Redis缓存…...

#力扣:1. 两数之和@FDDLC

1. 两数之和 - 力扣&#xff08;LeetCode&#xff09; 一、Java import java.util.HashMap;class Solution {public int[] twoSum(int[] nums, int target) { //返回数组HashMap<Integer, Integer> map new HashMap<>(); //键&#xff1a;元素值&#xff1b;值&…...

【小沐学Python】各种Web服务器汇总(Python、Node.js、PHP、httpd、Nginx)

文章目录 1、Web服务器2、Python2.1 简介2.2 安装2.3 使用2.3.1 http.server&#xff08;命令&#xff09;2.3.2 socketserver2.3.3 flask2.3.4 fastapi 3、NodeJS3.1 简介3.2 安装3.3 使用3.3.1 http-server&#xff08;命令&#xff09;3.3.2 http3.3.3 express 4、PHP4.1 简…...

【AI视野·今日Robot 机器人论文速览 第四十六期】Tue, 3 Oct 2023

AI视野今日CS.Robotics 机器人学论文速览 Tue, 3 Oct 2023 Totally 76 papers &#x1f449;上期速览✈更多精彩请移步主页 Interesting: &#x1f4da;Aerial Interaction with Tactile, 无人机与触觉的结合&#xff0c;实现空中交互与相互作用。(from CMU) website&#…...

macOS三种软件安装目录以及环境变量优先级

一、系统自带应用 这些软件&#xff08;以git为例&#xff09;位于根目录下的/usr/bin/xxx&#xff0c;又因为系统级环境变量文件/etc/paths已指定了命令查找位置&#xff1a; /usr/local/bin /System/Cryptexes/App/usr/bin /usr/bin /bin /usr/sbin /sbin所以这些自带应用可…...

嵌入式Linux裸机开发(一)基础介绍及汇编LED驱动

系列文章目录 文章目录 系列文章目录前言IMX6ULL介绍主要资料IO表现形式 汇编LED驱动原理图初始化流程时钟设置IO复用设置电气属性设置使用GPIO 编写驱动编译程序编译.o文件地址链接.elf格式转换.bin反汇编&#xff08;其他&#xff09; 综合成Makefile完成一步编译烧录程序imx…...

企业微信机器人对接GPT

现在网上大部分微信机器人项目都是基于个人微信实现的&#xff0c;常见的类库都是模拟网页版微信接口。 个人微信作为我们自己日常使用的工具&#xff0c;也用于支付场景&#xff0c;很怕因为违规而被封。这时&#xff0c;可以使用我们的企业微信机器人&#xff0c;利用企业微信…...

【数据结构】排序(1) ——插入排序 希尔排序

目录 一. 直接插入排序 基本思想 代码实现 时间和空间复杂度 稳定性 二. 希尔排序 基本思想 代码实现 时间和空间复杂度 稳定性 一. 直接插入排序 基本思想 把待排序的记录按其关键码值的大小依次插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为止&…...

Python 列表推导式深入解析

Python 列表推导式深入解析 列表推导式是 Python 中的一种简洁、易读的方式&#xff0c;用于创建列表。它基于一个现有的迭代器&#xff08;如列表、元组、集合等&#xff09;来生成新的列表。 基本语法&#xff1a; 列表推导式的基本形式如下&#xff1a; [expression for…...

信息学奥赛一本通-编程启蒙3103:练18.3 组别判断

3103&#xff1a;练18.3 组别判断 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 1963 通过数: 1418 【题目描述】 信息学课上要同学分组做期末报告&#xff0c;分组的方式为依座号顺序&#xff0c;每 3个人一组。如&#xff1a;1, 2, 3 为第一组&#xff0c;4, …...

C++ primer plus--探讨 C++ 新标准

18 探讨 C 新标准 18.1 复习前面介绍过的 C11 功能 &#xff08;1&#xff09;C11 扩大了列表初始化的适用范围&#xff0c;使用初始化列表时&#xff0c;可以不加等号。 int x {5}; float y {1.1}; short arr[5] {1, 2, 3, 4, 5}; int* ar new int[4] {1, 2, 3, 4}; vect…...

2023版 STM32实战6 输出比较(PWM)包含F407/F103方式

输出比较简介和特性 -1-只有通用/高级定时器才能输出PWM -2-占空比就是高电平所占的比例 -3-输出比较就是输出不同占空比的信号 工作方式说明 -1-1- PWM工作模式 -1-2- 有效/无效电平 有效电平可以设置为高或低电平&#xff0c;是自己配置的 周期选择与计算 周期重…...

选择排序算法:简单但有效的排序方法

在计算机科学中&#xff0c;排序算法是基础且重要的主题之一。选择排序&#xff08;Selection Sort&#xff09;是其中一个简单但非常有用的排序算法。本文将详细介绍选择排序的原理和步骤&#xff0c;并提供Java语言的实现示例。 选择排序的原理 选择排序的核心思想是不断地从…...

暖色网站模板/成品视频直播软件推荐哪个好一点

题目&#xff1a; 成绩统计&#xff1a; 小蓝给学生们组织了一场考试&#xff0c;卷面总分为 100 分&#xff0c;每个学生的得分都是一个 0 到 100 的整数。 如果得分至少是 60 分&#xff0c;则称为及格。如果得分至少为 85 分&#xff0c;则称为优秀。 请计算及格率和优秀率&…...

有域名和虚拟服务器后怎么做网站/营销推广方案模板

保证相等元素的原始位置的排序被称为是稳固的。一个非稳固排序&#xff08;unstable sort&#xff09;不保证相等的元素在排序之后还会保持原来的顺序。.NET使用的排序方法是不稳固的。这些排序方法&#xff0c;包括 System.Array.Sort 和 System.Collections.Generic.List<…...

个人网站 建设/360营销

需求催生产品更新&#xff0c;U盘也是如此。一直以来&#xff0c;U盘作为传输转移临时文件的存储工具&#xff0c;被很多人需要。慢慢的&#xff0c;大家开始追求U盘速度、U盘容量&#xff0c;对于追求效率以及更专业存储的用户来说&#xff0c;更快更大容量的U盘才是他们需要的…...

深圳做网站比较好的公司/百度手机助手下载安卓版

原文网址&#xff1a;http://www.cnblogs.com/peida/archive/2013/03/15/2960802.html scp是secure copy的简写&#xff0c;用于在Linux下进行远程拷贝文件的命令&#xff0c;和它类似的命令有cp&#xff0c;不过cp只是在本机进行拷贝不能跨服务器&#xff0c;而且scp传输是加密…...

温州网站建设方案外包/今日国内新闻

在 Golang 中&#xff0c;我们经常碰到要设置一个结构体的默认值&#xff0c;但 Golang 没有较好的方式实现这功能&#xff0c;需要通过其它方式实现&#xff0c;其效果也比较优雅。定义一个struct &#xff0c;想设定默认值&#xff0c;如下面的形式&#xff1a;type Person s…...

网站登录 效果代码/上海快速排名优化

本节书摘来异步社区《BGP设计与实现》一书中的第1章&#xff0c;第1.1节&#xff0c;作者&#xff1a; 【美】Randy Zhang , Micah Bartell 译者&#xff1a; 黄博 , 葛建立 责编&#xff1a; 傅道坤&#xff0c;更多章节内容可以访问云栖社区“异步社区”公众号查看。 第一部分…...