SpringBootApplication注解——史上最全最详细

Spring系列——@Conditional Spring注解之@Conditional前言源码解析@Conditional工作流程@Conditaional实战 前言 Spring4推出了@Conditional注解,方便程序根据当前环境或者容器情况来动态注入bean,SpingBoot在@Conditional的基础上派生出许多注解,如@ConditionalOnMissingBean、@ConditionalOnExpression、@ConditionalOnClass等,这样使得我们动态注入Bean更加简洁方便,所以我觉得我们有必须来好好的学 阅读详情
AI摘要

本文详细解析了SpringBootApplication注解的各个组成元素,包括@Target、@Retention、@Documented、@Inherited以及@SpringBootConfiguration和@EnableAutoConfiguration的作用。@Target定义了注解的使用范围,@Retention控制注解的生命周期,@Documented指示注解应包含在文档中,@Inherited允许子类继承父类的注解。@SpringBootConfiguration相当于Spring的@Configuration,用于配置类。@EnableAutoConfiguration则是Spring Boot的核心,启动自动配置功能。自动配置涉及到@AutoConfigurationPackage和@Import,它们分别负责包扫描和导入配置类。通过对这些概念的了解,可以更好地掌握Spring Boot的初始化过程。

SpringBootApplication

话不多说,先写三遍:SpringBootApplication、SpringBootApplication、SpringBootApplication

我们先来看看SpringBootApplication里面是啥

1.Target

这是个啥?  它是用于设定注解范围(被描述的注解可以用在什么地方)也急速hi限制了注解的作用域,那啥是注解的范围?注解的范围又有哪些呢?

@Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。

/** Class, interface (including annotation type), or enum declaration */
    TYPE,
    //类,接口,枚举类
    /** Field declaration (includes enum constants) */
    FIELD,
    //枚举
    /** Method declaration */
    METHOD,
    //只用于方法
    /** Formal parameter declaration */
    PARAMETER,
       
    /** Constructor declaration */
    CONSTRUCTOR,
    //构造方法
    /** Local variable declaration */
    LOCAL_VARIABLE,
    
    /** Annotation type declaration */
    ANNOTATION_TYPE,

    /** Package declaration */
    PACKAGE,

    /**
     * Type parameter declaration
     *
     * @since 1.8
     */
    TYPE_PARAMETER,

    /**
     * Use of a type
     *
     * @since 1.8
     */
    TYPE_USE

@Target(ElementType.TYPE) //注解的作用域
@Retention(RetentionPolicy.RUNTIME) //注解的生存周期
@Documented //可以被文档化
@Inherited //注解用于标注一个父类的注解是否可以被子类继承
@SpringBootConfiguration //声明为一个配置类 proxyBeanMethods是否开启bean代理,默认是true,从IOC容器中取;如果是false则每次获取都是一个新的实例
@EnableAutoConfiguration //开启自动配置---这个将是我们研究的重点
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
		@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) //包扫描的规则

 https://www.cnblogs.com/unknows/p/10261539.html

2.Retention

说明:Retention定义了被它注解了的注解可以保留多久,我们点如它的枚举类型看看

    /**
     * Annotations are to be discarded by the compiler.
     */
    SOURCE,

    /**
     * Annotations are to be recorded in the class file by the compiler
     * but need not be retained by the VM at run time.  This is the default
     * behavior.
     */
    CLASS,

    /**
     * Annotations are to be recorded in the class file by the compiler and
     * retained by the VM at run time, so they may be read reflectively.
     *
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME

source:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;被编译器忽略

class:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期

runtime:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在

生命周期:runtime>class>source

3.@Documented

注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中,是一个标记注解,没有成员。

4.@Inherited

如果一个类用上了@Inherited修饰的注解,那么其子类也会继承这个注解

5.@SpringBootConfiguration

SpringBootConfiguration与Spring中的@Configuation的作用基本一致,只不过@SpringBootConfiguration是springboot的注解,而@Configuration是spring的注解。

  1. @Configuration 可以理解为一个Configuration就是对应的一个Spring的xml版的容器;(beans)

@configuation的作用,实现IOC的关键

 @Configuation等价于<Beans></Beans>

 @Bean等价于<Bean></Bean>

 @ComponentScan等价于<context:component-scan base-package=”com.dxz.demo”/>

6.@EnableAutoConfiguration

自动装配

Target、Retention、Documentd就不用我过多描述了,我们来看看

6.1@AutoConfigurationPackage这个注解

顾名思义:他的中文意思就是自动配置包(我的直译)

我们再来看看@autoConfigurationPackage里面是啥

 6.1.1 @Import

这个注解类是用于导入配置类或者一些需要前置加载的类,你就当作Import 包.类

6.1.2  AutoConfigurationpackages.Registrar.class

这就话其实是引用AutoConfigurationpackages抽象类里面的Registrar类

我们点进去来看看:

 这个类实现了哪些接口我们就不管了,我们直接来看它重写的两个方法:在registerBeanDefinitions方法中,我们可以从左到右读他的方法体,register(register,新建一个PackageImports匿名对象,将metadata这个对象形参填入,然后使用getPackageNames方法填入数组)

其实这就是扫描主配置类同级目录以及子包,然后一一记录下来,并将相应的组件导入到springboot创建管理的容器中。

这里我们大概就明白了@AutoConfigurationPackage这个注解的意思了,其实就是自动扫描包,并记录下来的注解,不过我们要明白的是它的作用范围是同级的包,以及以下的包,如果有包在@AutoConfigurationPackage注解范围以上,那么@AutoConfigurationPackage就扫描不到这个包。

6.2 AutoConfigurationImportSelector.class

我们先看看它的结构

虽然说这个类的变量很多,但是我们仍然可以看到几个带有bean、filter的变量名,那我们可以肯定这个类和bean(类的代理或代言人(实际上确实是通过反射、代理来实现的))以及filter(过滤器)有乱七八糟的关系

猜想已经确定了,我们再来看看方法体,来看我们的猜想是不是正确的。

protected Class<?> getSpringFactoriesLoaderFactoryClass() {
		return EnableAutoConfiguration.class;
	}

这个方法体的名字叫做(我的直译):得到spring的工厂加载工厂类

工厂加载工厂类?我咋感觉像是实现IOC的嘞?我们再来看看返回的是啥?

return EnableAutoConfiguration.class;

返回一个EnableAutoConfiguration类,我知乎内行。

这个方法看不出啥,我们在来看看有没有调用它的方法,搜索了一下还真有。

	/**
	 * Return the auto-configuration class names that should be considered. By default
	 * this method will load candidates using {@link SpringFactoriesLoader} with
	 * {@link #getSpringFactoriesLoaderFactoryClass()}.
	 * @param metadata the source metadata
	 * @param attributes the {@link #getAttributes(AnnotationMetadata) annotation
	 * attributes}
	 * @return a list of candidate configurations
	 */
	protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {
		List<String> configurations = SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass(),
				getBeanClassLoader());
		Assert.notEmpty(configurations, "No auto configuration classes found in META-INF/spring.factories. If you "
				+ "are using a custom packaging, make sure that file is correct.");
		return configurations;
	}

SpringBoot学习总结(1) 看到群里的大佬们在研究SpringBoot,就自己学习学习,现在一些心得体会记录下来,供大家参考学习。 1.SpringBoot是什么? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程;该框架使用了特定的方式来进行配置,这极大的解放了开发者,使开发人员不再需要应对复杂的配置文件。 更通俗的来说,SpringBoot其实在内部提... 阅读详情

相关推荐

Spring Boot注解汇总(详细)

提供了许多注解,这些注解使得开发者能够快速地配置和集成Spring应用程序。以下是一些常用的注解:这是一个组合注解,包含了和。包含三者的功能。举例:源代码:@Inherited)}//省略其他代码,详情参考具体源码2、这个注解包含了@Configuration,@Configuration里面又包含了一个@Component注解,也就是说,这个注解标注在哪个类上,就表示当前这个类是一个配置类,而配置类也是spring容器中的组件。

m0_74097130的博客 1952

SpringBoot之@SpringBootApplication注解详解

前言 @SpringBootApplication注解中包含了SpringBoot的包扫描原理、自动装配原理等诸多原理,下面进行该注解的详细研究。 研究上面的原理,主要是研究@SpringBootApplication内部的组成结构,如下图: 下面对@SpringBootConfiguration和@EnableAutoConfiguration进行详解。 @SpringBootConfiguration注解 点进@SpringBootConfiguration内部,看其内部结构: @Configura

敲代码的小小酥的博客 9078

Unity通用Buff系统,Buff编辑器(1,理论篇)(技能系统之Buff篇)

逻辑层根据游戏的规则和设计,控制Buff的生命周期、影响目标对象的属性或行为,以及处理Buff的交互和冲突。Buff堆叠和冲突:有些游戏中允许同类型的Buff叠加,以增加效果的强度,而有些游戏中可能不允许Buff叠加,只能由更强力的Buff来覆盖较弱的Buff。灵活个性化:每个游戏对象拥有自己的BuffManager,可以实现个体对象的独特Buff效果,增加游戏的多样性和个性化。自由控制:每个对象独立管理自己的Buff,可以自由地激活、更新和移除Buff效果,提供更精细的控制和逻辑实现。

u010082265的博客 4693

SpringBootApplication最详细注解

这里我们大概就明白了@AutoConfigurationPackage这个注解的意思了,其实就是自动扫描包,并记录下来的注解,不过我们要明白的是它的作用范围是同级的包,以及以下的包,如果有包在@AutoConfigurationPackage注解范围以上,那么@AutoConfigurationPackage就扫描不到这个包。它是用于设定注解范围(被描述的注解可以用在什么地方)也急速hi限制了注解的作用域,那啥是注解的范围?如果一个类用上了@Inherited修饰的注解,那么其子类也会继承这个注解。

ZJRUIII的博客 2996

深度学习(Deep Learning, DL)简介

深度学习(Deep Learning, DL)是机器学习的一个子领域,主要使用多层神经网络来处理复杂的数据和任务。深度学习通过模拟人脑的神经网络结构,能够自动提取特征并进行高效的模式识别和预测。

qq_28791753的博客 1万+

从零开始:TexLive(Latex)安装与配置全指南

本文提供了一份详尽的TexLive(Latex)安装与配置全指南,旨在帮助用户从零开始快速搭建LaTeX工作环境。内容涵盖从镜像下载、安装步骤详解、环境验证到高效编辑器(如VS Code)配置,并特别强调了中文排版支持与宏包管理,确保用户能顺利处理学术论文等专业文档的排版需求。

weixin_29284885的博客 903

史上最全 SpringBoot 注解详解

一、注解(annotations)列表 1、@SpringBootApplication 包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。 其中@ComponentScan让Spring Boot扫描到Configuration类并把它加入到程序上下文。 2、@ComponentScan 组件扫描,可自动发现和装配一些Bean...

riemann_的博客 8713

对族实例进行任意的矩阵变换,需要什么样的族?

问:一个小问题,想向您请教一下。 能不能实现一个这样的操作:创建了一个常规模型的FamilyInstance,然后知道旋转和平移的矩阵,能否根据变换矩阵更新FamilyInstance的位置,绕任意轴旋转任意角度。 请问什么样的实体才能在revit项目文件中任意旋转?貌似一般的实例只能在XY平面内旋转,并且LocationPoint中只有一个Rotation参数。答:您好,因为Revit里面的构件

我爱Revit —— BIM应用及BIM应用软件解决方案专栏 3628

springbootapplication注解包括哪些注解_@SpringBootApplication 注解 详解

简单介绍一下@SpringBootApplication注解都有哪些注解组合而成。SpringBoot一、@SpringBootApplication是SpringBoot的一个核心注解,也是一个组合注解。二、@SpringBootApplication包含的注解详解SpringBootApplication组合注解1、@Target({ElementType.TYPE}) : 自定义所修饰的注解...

weixin_39565332的博客 6584

12、无人机系统的建模与仿真

本文深入探讨了无人机系统的建模与仿真技术,涵盖其发展需求、历史演变、动力学建模方法、常用参考框架与状态变量表示,并分析了在控制系统设计、操作员培训和子系统测试中的关键应用。文章还介绍了不同类型无人机(固定翼、旋翼、混合翼)在建模与仿真中的差异,提出了多学科融合、高精度实时仿真及VR/AR技术等未来发展趋势,并给出了实际建模与仿真的标准操作流程,为无人机系统的设计与优化提供了全面的技术支持与展望。

websocket5live的博客 196

倍福EL6002做RS232通信获取称重数据..

本文介绍EL6002模块通过RS232自由口通信协议获取从站数据。具体数据对照说明手册即可。

weixin_41883890的博客 1012

SpringBootApplication注解大解密

SpringBootApplication注解解密

zmm0628的博客 853

每周技巧tc 问题处理技巧Teamcenter

(内部)Dataset和Tool相关之2.1——Tool轮询Contents Type和Type Name-赖良顺.docx。(内部)Dataset和Tool相关之3.2——编写Batch和Perl为客户端自动注册相关内容-赖良顺.docx。(内部)Dataset和Tool相关之1.1——Tools和Datasets参数定义-赖良顺.docx。(内部)Dataset和Tool相关之1.2——相关首选项定义及修改-赖良顺.docx。(内部)Dataset和Tool相关之0——概述-赖良顺.docx。

TC技术专栏 1230

浅谈Java注解之SpringBootApplication

是一个组合注解,由和这三个注解组合而成。它的主要作用是标注一个 Java 类作为 Spring Boot 应用程序的启动类,当运行该类的main方法时,Spring Boot 会自动进行一系列的配置和初始化操作,从而启动整个应用程序。

a876106354的博客 850

论文复现《基于最大李雅普诺夫指数的电力系统暂态电压稳定评估方案》

电力系统暂态电压稳定评估方案 摘要 本研究提出了一种基于最大李雅普诺夫指数的电力系统暂态电压稳定评估方法。通过分析相空间中相邻轨迹的收敛或发散特性,该方法能够提前判别系统稳定性。论文首先阐述了暂态电压稳定机理,详细介绍了最大李雅普诺夫指数的计算方法。针对IEEE-39节点系统,建立了仿真模型并获取不同故障场景下的数据。研究开发了完整的评估程序,包括数据预处理、相空间重构、指数计算等模块,并通过与时域仿真结果的对比验证了方法的准确性。实验结果表明,该方法能够快速有效地评估电力系统的暂态电压稳定性,为系统安全运

max500600的博客 187

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SpringBootApplication注解介绍

SpringBootApplication是springboot启动类注解,是一个组合注解除了元注解外,主要包含三个注解;

m0_46561911的博客 1767

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

SpringBootApplication注解解析

SpringBootApplication注解解析

qq_43466228的博客 903

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

springboot中的springbootApplication注解有什么作用?

@SpringBootApplication 我们知道,一个springboot项目和一个普通的web项目相比最大的优势就在于其改良了原本笨重的配置,内部自身实现了很多第三方库,使得项目精简了不少。当然启动一个springboot项目只需从主程序类的main函数进入,@SpringBootApplication注解会自动为我们扫描配置,最终成功启动项目。那么@SpringBootApplication注解究竟有什么神奇的作用呢? 了解@SpringBootApplication @SpringBootApp

weixin_45617512的博客 9107

SpringBootApplication的exclude不生效问题排查

SpringBootApplication的exclude不生效问题排查 背景 在ManApplication上添加了SpringBootApplication中配置了exclude={org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration.class} 但是在启动过程了ElasticsearchAutoConfiguration还是加载了,使用配置文件的方式就可以避免加载。 排查 首先

sutonline的博客 1万+

SpringBootApplication包含的三个注解

SpringBootApplication包含的三个注解

lynn_123456的博客 2711

SpringBootApplication注解保姆级带你如何应对面试官

在Java Spring Boot框架中,@SpringBootApplication注解是一个组合注解,它由以下三个注解组成:@SpringBootConfiguration,@EnableAutoConfiguration和@ComponentScan。这三个注解的加载顺序如下:@SpringBootConfiguration:这个注解用于标识该类是Spring Boot应用的配置类,它会被自动扫描并加载。通常,这个注解会放在主类上(即包含main方法的类)。

小电玩 1678

SpringBoot启动类上的注解SpringBootApplication

本文我们来看看Spring Boot启动类上的注解包含了什么内容, SpringBootApplication实质上是一个组合注解, 主要包含了SpringBootConfiguration配置文件注解 EnableAutoConfiguration自动化配置注解 @ComponentScan包扫描注解,默认扫描启动类所在包下面的所有类,包含子包下的所有类, 如果启动类不在根包下,需要重新定义一个...

JustinNeil的博客 700

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.an.

Peter_S的博客 290

SpringBootApplication复合注解

众所周知,SpringBootApplication是一个复合注解,包括@SpringBootConfiguration @EnableAutoConfiguration @ComponentScan 三个部分。 SpringBootConfiguration @Configuration public @interface SpringBootConfiguration { } 这个注解就是@Configuration注解套了一层皮,很明显表示当前类是一个注解类,我们可以在主启动类里进行Bean的注入,

qq_41948178的博客 1676

SpringBootApplication是哪三个注解

@SpringBootApplication包含的三个注解及其含义 第一个:@SpringBootConfiguration(在这个类的源码中又有一个Configuration的注解) @Configuration这个注解的作用就是声明当前类是一个配置类,然后Spring会自动扫描到添加了@Configuration的类,读取其中的配置信息,而@SpringBootConfiguration是来声明当前类是SpringBoot应用的配置类,项目中只能有一个。所以一般我们无需自己添加。 第二个:@Ena

Mrrr_Li的博客 1万+
上一篇: 最全mybatis插入后返回id,避免返回值为1
下一篇: 史上最全:windows电脑连接虚拟机(Linux)上的redis教程
依晴无旧
博客等级 码龄7年 1683粉丝 159原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值