【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)是一种计算机高级程序设计语言&…

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

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

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

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

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…

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

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

计算机网络实验实验之VLAN的配置与分析

实验目的 了解什么是带内管理;熟练掌握如何使用telnet方式管理交换机;熟练掌握如何为交换机设置web方式管理;熟练掌握如何进入交换机web管理方式;了解交换机web配置界面,并能进行部分操作。 (6)了解VLAN原理&#xf…

不敢说懂你 - Glide硬核源码剖析

问题 Glide加载流程? Glide整体架构? Glide数据加载的来源? Glide缓存加载的流程? Glide线程切换原理? Glide如何感知Activity? Glide哪种情况会返回应用级的RequestManager? … 带着一些问题去阅读… 使用示例 本篇主要基于glide:4.12.0进行分析。下面是Gli…

PyQt6实战7--文本编辑器

一个简单的文本编辑器 features: 1.open 一个文件夹作为项目 2.save 保存当前窗口的内容 3.退出 4.双击文件可以打开文件内容 5.简单的python高亮 6.双击相同文件,会找到之前打开过的文件 打开一个文件夹 打开项目,双击打开文件 保存 代码&#xf…

CSRF漏洞

文章目录 目录 文章目录 一.什么是CSRF 二.CSRF漏洞工作原理 一.什么是CSRF CSRF(Cross-Site Request Forgery)漏洞,也被称为跨站请求伪造漏洞,是一种Web应用程序安全漏洞。当受害者在已经登录了某个网站的情况下,访问…