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

@SpringBootApplication 包含的三个注解及其含义

一、@SpringBootApplication 注解源码
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//package org.springframework.boot.autoconfigure;import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.beans.factory.support.BeanNameGenerator;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.context.TypeExcludeFilter;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.core.annotation.AliasFor;@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}
), @Filter(type = FilterType.CUSTOM,classes = {AutoConfigurationExcludeFilter.class}
)}
)
public @interface SpringBootApplication {// ... ...
}

  从源码中可知,@SpringBootApplication 包含的三个注解是 @SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。

二、@SpringBootApplication包含的三个注解及其含义
  1. @SpringBootConfiguration(该类的源码中又有一个 @Configuration 的注解)

  @Configuration 这个注解的作用就是声明当前类是一个配置类,然后 Spring 会自动扫描到添加了 @Configuration 的类,读取其中的配置信息,而 @SpringBootConfiguration 是来声明当前类是 SpringBoot 应用的配置类,项目中只能有一个。所以一般我们无需自己添加。

  1. @EnableAutoConfiguration

  开启自动配置,告诉 SpringBoot 基于所添加的依赖,去 “猜测” 你想要如何配置 Spring。比如我们引入了 spring-boot-starter-web,而这个启动器中帮我们添加了 tomcat、SpringMVC的依赖,此时自动配置就知道你是要开发一个 web 应用,所以就帮你完成了 web 及 SpringMVC 的默认配置了!我们使用 SpringBoot 构建一个项目,只需要引入所需框架的依赖,配置就可以交给 SpringBoot 处理了。

  1. @ComponentScan

  配置组件扫描的指令。
  提供了类似于 <context:component-scan> 标签的作用。
  通过 basePackageClasses 或者 basePackages 属性来指定要扫描的包。
  如果没有指定这些属性,那么将从声明这个注解的类所在的包开始,扫描包及子包。
  而我们的 @SpringBootApplication 注解声明的类就是 main 函数所在的启动类,因此扫描的包是该类所在包及其子包。因此,一般启动类会放在一个比较靠前的包目录中。

相关文章:

  • 机器人、智能小车常用的TT电机/310电机/370电机选型对比
  • C语言的system函数简介
  • C++模板进阶
  • 系统的安全性设计
  • 5G工业网关视频传输应用
  • MES系统在制造企业数字化工厂中扮演着什么角色?
  • 基于RT-Thread快速上手SD NAND 虚拟文件系统
  • Mac 打不开github解决方案
  • [pluginviteimport-analysis] vite 提示jsx语法报错
  • 《Kotlin核心编程》笔记:面向对象
  • 03 python循环语句
  • 7. 异常、断言及日志
  • 网络基础(五):网络层协议介绍
  • Crow:黑魔法 调用Rule绑定的handler_
  • 数据分享 I 全国市级商品房屋销售数据,shp/excel格式,2005-2020年数据
  • angular2 简述
  • Apache Pulsar 2.1 重磅发布
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • javascript面向对象之创建对象
  • Java教程_软件开发基础
  • JDK9: 集成 Jshell 和 Maven 项目.
  • Object.assign方法不能实现深复制
  • Redis中的lru算法实现
  • Sublime text 3 3103 注册码
  • Windows Containers 大冒险: 容器网络
  • 产品三维模型在线预览
  • 从伪并行的 Python 多线程说起
  • 码农张的Bug人生 - 初来乍到
  • 你不可错过的前端面试题(一)
  • 如何优雅地使用 Sublime Text
  • 限制Java线程池运行线程以及等待线程数量的策略
  • raise 与 raise ... from 的区别
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • 关于Android全面屏虚拟导航栏的适配总结
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (待修改)PyG安装步骤
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)jQuery 基础
  • (转)人的集合论——移山之道
  • .net core使用ef 6
  • .NET DevOps 接入指南 | 1. GitLab 安装
  • .NET Framework 服务实现监控可观测性最佳实践
  • .NET Framework杂记
  • .net 调用php,php 调用.net com组件 --
  • .Net 应用中使用dot trace进行性能诊断
  • .net反编译的九款神器
  • .NET开发者必备的11款免费工具
  • .NET应用架构设计:原则、模式与实践 目录预览
  • [ Algorithm ] N次方算法 N Square 动态规划解决
  • [ CTF ] WriteUp-2022年春秋杯网络安全联赛-冬季赛
  • [ NOI 2001 ] 食物链
  • [ solr入门 ] - 利用solrJ进行检索
  • [20171101]rman to destination.txt