SpringBoot学习笔记(五):SpringBoot原理分析-@SpringBootApplication 注解详解


一、@SpringBootApplication 引导类注解,主要集成了三个注解的功能:

1、@SpringBootConfiguration 注解:表示当前类是一个配置类;

2、@ComponentScan 注解:用于对引导类所属的包及其子包下的组件进行扫描;

3、@EnableAutoConfiguration 注解:允许自动配置;

 

二、进入 @SpringBootApplication 源码,可以看到一个 @SpringBootConfiguration 注解:

再进入 @SpringBootConfiguration 源码,可以看到一个 @Configuration 注解,我们学习 Spring 的时候知道,被 @Configuration 注解修饰的类,就是一个配置类;

 

三、我们在 @SpringBootApplication 源码里还可以看到一个 @ComponentScan 注解,叫做组件扫描注解:

我们知道 SpringBoot 是基于约定的,即 SpringBoot 约定在引导类(即被 @SpringBootApplication 修饰的类)所属的包及其子包下的所有类都会被扫描;

如下所示:我们创建了 Controller,但是我们并没有配置组件扫描,SpringBoot 却可以识别到我们的 Controller;就是因为我们创建的 Controller 所属的包,位于引导类所属包的子包下;但是如果 Controller 所在的包不在引导类的包下或者子包下,那么 Controller 就不会被扫描到。

 

四、我们在 @SpringBootApplication 源码里还可以看到一个 @EnableAutoConfiguration 注解,这个注解的功能是允许自动配置:

进入 @EnableAutoConfiguration 可以看到一个个 @Import({AutoConfigurationImportSelector.class}) 注解,表示把外部的配置类导入到当前注解中,那么当前注解就具备了引入类的功能;

我们进入 AutoConfigurationImportSelector(自动配置导入选择器类)源码,查看当前类所属的包名:

然后我们查看 SpringBoot 项目所依赖的外部 jar 包(External Libraries):

找到当前 SpringBoot 版本对应的 具有 autoconfigure 关键字的 jar 包,可以找到上面 AutoConfigurationImportSelector 类及其所属的包:

在该 jar 包中我们还可以看到一个 META-INF 包,下面有一个 spring-configuration-metadata.json 文件,这个文件是 SpringBoot 默认的配置文件,配置一些常用的数据;

比如 tomcat 的端口号配置:

 

 五、虽然 spring-configuration-metadata.json 文件中的默认配置我们不能修改,但是我们可以自定义同名的配置,覆盖掉默认的配置数据;通过 SpringBoot学习笔记(三):SpringBoot 原理分析-Springboot起步依赖,我们知道 SpringBoot 项目在启动的时候,会自动加载 ${basedir}/src/main/resources 路径下,以 application 开头的配置文件,所以我们可以在配置文件中自己指定配置的数据;

如下所示,我们进行如下自定义配置:

启动 SpringBoot 项目,结果为:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值