【SpringBoot】springboot的启动初步理解

springboot的启动初步理解

 

我们会发现开发一个Spring Boot,都会有一个注解@SpringBootApplication和一个类定义SpringApplication.run,点击源码可以查看到如下代码:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}
)}
)
public @interface SpringBootApplication {
....
}

其实这里最重要的是以下三个注解:

@SpringBootConfiguration 该注解点开看里面是引入了@Configuration

@EnableAutoConfiguration  开启springboot的注解功能

@ComponentScan 扫描路径设置

其实我们的程序启动类,可以使用以下三个注解依然可以启动 @Configuration @EnableAutoConfiguration @ComponentScan,但是我们通常都是使用@SpringBootApplication

在启动类里面标注了@Configuration,意味着它其实也是一个 ioc容器的配置类,任何一个标注了@Configuration的Java类定义都是一个JavaConfig配置类。

任何一个标注了@Bean的方法,其返回值将作为一个bean定义注册到Spring的IOC容器,方法名将默认成该bean定义的id。

基于JavaConfig的配置形式是这样的:

@Configuration
public class TestConfiguration{
    @Bean
    public TestService testService(){
        return new TestServiceImpl(tempService());
    }
    
    @Bean
    public TempService tempService(){
        return new TempServiceImpl();
    }
}

@ComponentScan

@ComponentScan的功能其实就是自动扫描并加载符合条件的组件(比如@Component和@Repository等)或者bean定义,最终将这些bean定义加载到IoC容器中。

我们可以通过basePackages等属性来细粒度的定制@ComponentScan自动扫描的范围,如果不指定,则默认Spring框架实现会从声明@ComponentScan所在类的package进行扫描。

@ComponentScan:
ComponentScan 默认会扫描当前 package 下的的所有加
了@Component 、@Repository、@Service、@Controller的类到 IoC 容器中;

 

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

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

相关文章

OpenHarmony其他工具类—libharu [GN编译]

简介 libharu主要用于生成 PDF格式文件。 下载安装 直接在OpenHarmony-SIG仓中搜索libharu并下载。 使用说明 以OpenHarmony 3.1 Beta的rk3568版本为例 库代码存放路径:./third_party/libharu 修改添加依赖的编译脚本,路径:/developtools…

Linux的firewalld防火墙

介绍firewalld: ①、firewalld(Dynamic Firewall Manager of Linux systems,Linux系统的动态防火墙管理器)服务是默认的防火墙配置管理工具,它拥有基于CLI(命令行界面)和基于GUI(图…

Modelsim与Verilog入门

0.什么是Modelsim? Modelsim是一个支持多语言的仿真环境,比如我知道的Verilog和VHDL语言都可以在里边使用,这俩都是硬件描述语言; 即就是个软件,你可以用Verilog语言来写代码,然后编译,仿真出…

【IEEE出版 | 中山大学主办 | 往届会后2-4个月EI检索】第五届电子通讯与人工智能学术会议(ICECAI 2024)

第五届电子通讯与人工智能国际学术会议(ICECAI 2024) 2024 5th International Conference on Electronic communication and Artificial Intelligence 第五届电子通讯与人工智能国际学术会议(ICECAI 2024)将于2024年5月31日-6月…

【Redis 神秘大陆】003 数据类型使用场景

三、Redis 数据类型和使用场景 Hash:对象类型的数据,购物车List:队列/栈Set:String类型的无序集合,intset,抽奖、签到、打卡,商品评价标签Sorted Set:存储有序的元素,zip…

MATLAB 点到平面距离的简易计算 (61)

MATLAB 点到平面的垂直距离 (61) 一、算法介绍二、算法实现1.代码2.结果一、算法介绍 一行代码计算点到平面的距离,下面是MATLAB版本的实现方法, 使用一组自定义的点和平面验证,结果表明计算正确: 二、算法实现 1.代码 代码如下(示例): % 定义点的坐标 point = …

7.3 哈希表与布隆过滤器(入门)—— C语言实现

文章目录 前言一、哈希表1.1 哈希函数1.2 哈希冲突 二、布隆过滤器布隆过滤器的工作原理:存储空间与元素数量的关系:结论: 三、哈希表的代码演示3.1 哈希表扩容 四、总结参考文献 前言 本章内容参考海贼宝藏胡船长的数据结构与算法中的第七章…

算法课程笔记——集合set

3复杂度不稳定 删一个和删除全部 注意iter是类 遍历是无序的

半导体材料(三)——P-N结和金属-半导体接触

本篇为西安交通大学本科课程《电气材料基础》的笔记。 本篇为这一单元的第三篇笔记,上一篇传送门。 p-n结和金属-半导体接触 p-n结 无偏压开路状态 如图a所示,左边是n型掺杂,右边是p型掺杂,在n区和p区之间形成了一个不连续的…

【MATLAB基础绘图第21棒】绘制比例弦图 (Chord Diagram)

MATLAB绘制比例弦图 Chord Diagram 1 简介1.1 弦图简介1.2 比例弦图简介 2 MATLAB绘制比例弦图2.1 数据准备2.2 基本绘制2.3 添加方向箭头2.4 添加绘图间隙2.5 添加刻度2.6 修改标签2.7 颜色设置2.8 弧块及弦属性设置2.8.1 弧块属性设置2.8.2 弦属性设置 2.9 字体设置 参考 1 简…

【Qt 学习笔记】Qt常用控件 | 显示类控件Label的使用及说明

博客主页:Duck Bro 博客主页系列专栏:Qt 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ Qt常用控件 | 显示类控件Label的使用及说明 文章编号:Qt 学…

C++必修:从C语言到C++的过渡(上)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 贝蒂的主页:Betty’s blog 1. 什么是C C(c plus plus)是一种计算机高级程序设计语言&…

设计模式:中介者模式

中介者模式定义 中介者模式(Mediator Pattern)是一种行为型设计模式,它通过引入一个第三方对象(中介者)来管理一组对象之间的复杂交互。这些对象通过中介者而不是直接相互通信,从而减少了它们之间的耦合度…

如何查看微信公众号发布文章的主图,如何看微信文章的主图,怎么才能拿到主图

如何查看,微信公众号发布文章的主图,如何看微信文章的主图 起因是这样的,当我看到一篇文章的时候,他的主图很漂亮,但是,正文里没有,而我又想看到,并且使用这张图片,该怎么…

十大排序——6.插入排序

这篇文章我们来介绍一下插入排序 目录 1.介绍 2.代码实现 3.总结与思考 1.介绍 插入排序的要点如下所示: 首先将数组分为两部分[ 0 ... low-1 ],[ low ... arr.length-1 ],然后,我们假设左边[ 0 ... low-1 ]是已排好序的部分…

【22.4】【22.5】【22.6】

【题解】2022年第四场寒假集训营题解 【题解】2022年第五场寒假集训营题解 【题解】2022牛客寒假算法基础集训营6 子序列权值乘积 思路:排序然后枚举 i i i 维护前缀中的信息即可。注意有坑:这道题要处理 2 k ( k ≤ 2 1 0 5 ) 2^k(k\leq 2\times…

go的实践

文章目录 用goroutine来替代mq做异步的应用心跳contenx的超时设置定时器break label核心代码 用goroutine来替代mq做异步的应用 方法在创建ai任务接口中用协程的方式异步调用go s.handleResultPolling(ctx, algorithm, taskId, iAiHandle),来更新ai任务的状态 心跳…

Python如何调用rar命令

通过os模块的system()方法调用了系统的rar.exe命令,这个方法会返回一个变量exit_status。 import os import time source [r‘D:\Work\Python\Demo‘, ‘d:\\work\\linux‘] target_dir ‘D:\\Work\\backup\\‘ target target_dir time.strftime(‘%Y%m%d%H%M%S…

Flutter第十弹 ScrollView滚动组件

目标: 1)滚动组件的特性? 2)有哪些常用的滚动组件? 一、基础滚动组件 Flutter有许多内置的小部件可以自动滚动,还提供了各种小部件,您可以自定义这些小部件来创建特定的滚动行为。 1.1 Scr…

【单元测试】Junit 4--junit4 内置Rule

1.0 Rules ​ Rules允许非常灵活地添加或重新定义一个测试类中每个测试方法的行为。测试人员可以重复使用或扩展下面提供的Rules之一,或编写自己的Rules。 1.1 TestName ​ TestName Rule使当前的测试名称在测试方法中可用。用于在测试执行过程中获取测试方法名称…