关于@SpringBootApplication详解

 更新时间:2024年08月22日 08:41:35   作者:Maiko Star  
这篇文章主要介绍了关于@SpringBootApplication的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、@SpringBootApplication注解介绍

@SpringBootApplication这个注解是springboot启动类上的一个注解,是一个组合注解,也就是由其他注解组合起来,它的主要作用就是标记说明这个类是springboot的主配置类,springboot可以运行这个类里面的main()方法来启动程序

这个注解主要由三个子注解组成:

  • @SpringBootConfiguration
  • @EnableAutoConfiguration
  • @ComponentScan

二、@SpringBootConfiguration介绍

这个注解包含了@Configuration,@Configuration里面又包含了一个@Component注解,也就是说,这个注解标注在哪个类上,就表示当前这个类是一个配置类,而配置类也是spring容器中的组件

@SpringBootConfiguration注解包含:

@Configuration注解包含:

三、@ComponentScan介绍

包扫描注解:@ComponentScan 的作用就是根据定义的扫描路径,把符合扫描规则的类装配到spring容器中

四、@EnableAutoConfiguration介绍

这个注解是开启自动配置的功能,里面包含了两个注解

  • @AutoConfigurationPackage
  • @Import(AutoConfigurationImportSelector.class)

4.1 @AutoConfigurationPackage

它会自动扫描@SpringBootApplication注解所在类所在的包,并将该包及其子包下的所有组件加载到spring的容器中。

这个注解的作用说白了就是将主配置类(@SpringBootApplication标注的类)所在包以及子包里面的所有组件扫描并加载到spring的容器中,这也就是为什么我们在利用springboot进行开发的时候,无论是Controller还是Service的路径都是与主配置类同级或者次级的原因

4.2 @Import(AutoConfigurationImportSelector.class)

1.利用getAutoConfigurationEntry(annotationMetadata);给容器中批量导入一些组件

2.调用List<String> configurations = getCandidateConfigurations(annotationMetadata, attributes)获取到所有需要导入到容器中的配置类

3.利用工厂加载 Map<String, List<String>> loadSpringFactories(@Nullable ClassLoader classLoader);得到所有的组件

4.关键就在这个loadSpringFactories()方法里面,在这个方法里,它会查找所有在META-INF路径下的spring.factories文件,从META-INF/spring.factories文件中找到所有的对应配置类,然后将这些自动配置类加载到spring容器中。

默认扫描我们当前系统里面所有META-INF/spring.factories位置的文件

spring-boot-autoconfigure-2.3.4.RELEASE.jar包里面也有META-INF/spring.factories

虽然我们127个场景的所有自动配置启动的时候默认全部加载,但是xxxxAutoConfiguration按照条件装配规则(@Conditional),最终会按需配置。

AopAutoConfiguration类:

@Configuration(
    proxyBeanMethods = false
)
@ConditionalOnProperty(
    prefix = "spring.aop",
    name = "auto",
    havingValue = "true",
    matchIfMissing = true
)
public class AopAutoConfiguration {
    public AopAutoConfiguration() {
    }
	...
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringSecurity导致Redis压力大问题的解决方案

    SpringSecurity导致Redis压力大问题的解决方案

    在我们现有的系统中,用于登录的 Redis 服务器 CPU 占用率长期处于 90% 的高位,这一状况带来了极大的风险隐患,因此,本文旨在解决这个问题,下面小编给大家详细介绍SpringSecurity导致Redis压力大问题的解决方案,需要的朋友可以参考下
    2025-06-06
  • SpringBoot实现RabbitMQ监听消息的四种方式

    SpringBoot实现RabbitMQ监听消息的四种方式

    本文主要介绍了SpringBoot实现RabbitMQ监听消息的四种方式,包括@RabbitListener,MessageListener接口,MessageListenerAdapter适配器,@RabbitHandler这几种,感兴趣的可以了解一下
    2024-05-05
  • SpringBoot模板引擎之Thymeleaf的使用

    SpringBoot模板引擎之Thymeleaf的使用

    这篇文章主要介绍了SpringBoot模板引擎之Thymeleaf的使用,模板引擎是以业务逻辑层和表现层分离为目的的,将规定格式的模板代码转换为业务数据的算法实现,它可以是一个过程代码、一个类,甚至是一个类库,需要的朋友可以参考下
    2023-10-10
  • Java获取IP地址及对应的归属地的方法详解

    Java获取IP地址及对应的归属地的方法详解

    这篇文章主要为大家详细介绍了如何利用Java获取IP地址及对应的归属地,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-03-03
  • 求1000阶乘的结果末尾有多少个0

    求1000阶乘的结果末尾有多少个0

    题目是:求1000!的结果末尾有多少个0,解题思路:两个素数2、5,相乘即可得到10,我们可以认为,有多少组2、5,结尾就有多少个0,下面是代码,需要的朋友可以参考下
    2014-02-02
  • 浅析Java内存模型与垃圾回收

    浅析Java内存模型与垃圾回收

    下面小编就为大家带来一篇浅析Java内存模型与垃圾回收。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧,祝大家游戏愉快哦
    2016-05-05
  • Spring Cloud详细讲解zuul集成Eureka流程

    Spring Cloud详细讲解zuul集成Eureka流程

    这篇文章主要介绍了Spring Cloud zuul集成Eureka,Eureka Client中内置一个负载均衡器,用来进行基本的负载均衡,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-06-06
  • Java实现基于清除后分配规则的垃圾回收器详解

    Java实现基于清除后分配规则的垃圾回收器详解

    垃圾回收是 Java 语言的一项重要特性,自动管理对象内存,防止内存泄漏和野指针问题,下面我们就来看看如何利用Java实现基于清除后分配规则的垃圾回收器吧
    2025-03-03
  • Java实现的获取和判断文件头信息工具类用法示例

    Java实现的获取和判断文件头信息工具类用法示例

    这篇文章主要介绍了Java实现的获取和判断文件头信息工具类,结合实例形式分析了Java针对文件读取及头信息判断相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • Java的函数式编程详解

    Java的函数式编程详解

    用了这么久的Java8,我寻思这种话也好意思说出来吗,难道自己是PythonBoy出身就是看不懂Java的理由吗,身为一个合格的后端Boy不会还有人看不明白Java的函数式编程吧,接下来小编和大家浅聊一下Java的函数式编程,需要的朋友可以参考下
    2023-10-10

最新评论