【Spring Boot】自动配置及重要注解解析

这篇具有很好参考价值的文章主要介绍了【Spring Boot】自动配置及重要注解解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、自动配置及原理

1、springboot自动配置了哪些功能

1)tomcat的自动配置

引入了tomcat的相关依赖
【Spring Boot】自动配置及重要注解解析

2)自动配置springmvc及常用功能

我们在主启动类中加两行代码,查看一下spring boot加载了哪些组件
【Spring Boot】自动配置及重要注解解析
通过在控制台输出中搜索,我们可以发现转发请求的dispatcherServlet、解决乱码的characterEncodingFilter还有视图解析器ViewResolver都已经被自动加载

3)默认的包结构

主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来,无需向之前那样专门去配置
如果想调整包扫描路径,可以将主启动类中的@SpringBootApplication注解替换成
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
然后再@ComponentScan后面指定自己想要的包扫描路径

4)各种配置都具有默认值

我们可以简单看下各个配置的默认值
默认配置最终都是映射到某个类上,这个类会在容器中创建对象
【Spring Boot】自动配置及重要注解解析

5)按需加载所有的自动配置项

并非所有的自动配置项都会加载,只有我们引入了对应的启动器,才会自动加载相应的自动配置项
SpringBoot所有的自动配置功能都在spring-boot-autoconfigure这个jar包里面

2、注解分析

1)底层注解分析
  • @Configuration:标注当前类是一个配置类,可以使用@Configuration+@Bean的方式注册bean到spring boot的IOC容器中,默认是单实例的,可参考我之前的博客 【Spring】使用JavaConfig实现配置
    • 此注解新加了一个属性proxyBeanMethods,默认开启
    • 如果此属性为true,那么每次@Bean方法被调用多少次返回的组件都是单实例的,如果是false,那么保证每个@Bean方法被调用多少次返回的组件都是新创建的
    • 如果bean之间存在组件依赖必须使用Full模式(proxyBeanMethods=true),其他默认使用Lite模式(proxyBeanMethods=false)
  • @Import:在IOC容器中自动创建出引入类型的bean,默认bean的名字就是全类名
  • @ConditionalOnProperty(xxx):判断括号内的配置是否存在且配在auto配置且值为true就生效,你没配我也认为配了
  • @Conditional:条件装配,满足Conditional指定的条件,则进行bean注入,它有很多子类
    【Spring Boot】自动配置及重要注解解析
  • @ImportResource:用于导入 Spring 的 xml 配置文件,将该配置文件中定义的 bean 对象加载到Spring容器中,在配置类上使用
  • 想要将配置文件中的配置与类进行绑定,可以使用下面两种组合的注解
    • @ConfigurationProperties(prefix=“xxx”)+@Component:配置绑定,使用在实体类上,prefix前缀的值为配置文件中配置项的前缀
    • @EnableConfigurationProperties(xxx.class)+@ConfigurationProperties
      @EnableConfigurationProperties使用在配置类上,括号内填需要绑定配置的实体类,它的作用是使得@ConfigurationProperties注解生效,将括号内的bean注册到容器中
      @ConfigurationProperties使用在实体类上,这个注解通常是用来将properties和yml配置文件属性转化为bean对象使用
2)主启动类核心注解

主启动类中的@SpringBootApplication就等于@SpringBootConfiguration+@EnableAutoConfiguration+@ComponentScan

  • @SpringBootConfiguration,继续深入可以发现它就是@Configuration注解修饰的,表示这个类就是一个配置类

  • @EnableAutoConfiguration

    • @AutoConfigurationPackage
      继续深入可以发现,这个注解上面有一个@Import({Registrar.class})注解,作用就是将Register注册到组件中
      Register类里有一个方法可以批量注册bean,我们使用debug模式看一下传进来的元数据,这样就可以理解为什么Spring boot可以不用配置自动扫描了,因为它将启动类所在包下的类都注册到容器中了
      【Spring Boot】自动配置及重要注解解析

    • @Import({AutoConfigurationImportSelector.class})
      这个类和spring boot导入自动配置类有关,框架启动时会加载所有的配置类(关键文件META-INF下的spring.factories),但是因为条件装配规则(即@Conditional相关注解)的存在,这些自动配置会按需生效
      【Spring Boot】自动配置及重要注解解析
      【Spring Boot】自动配置及重要注解解析
      【Spring Boot】自动配置及重要注解解析
      上面这个方法会去我们引入的jar包下找META-INF/spring.factories文件,如果有
      org.springframework.boot.autoconfigure.EnableAutoConfiguration修饰的类,就会加载进来
      【Spring Boot】自动配置及重要注解解析
      注意,从spring boot2.7开始,慢慢不支持META-INF/spring.factories文件了
      需要导入的自动配置类可以放在
      /META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中,可以看下spring-boot-autoconfigure-2.7.0.jar下的这个文件

  • @ComponentScan:指定扫描哪些类,将其注册到容器中

3、自动配置实现原理

那么问题来了,spring boot是如何做到让我们免去那么多麻烦的配置的呢?
我们可以看一下DispatcherServletAutoConfiguration和HttpEncodingAutoConfiguration的源码
【Spring Boot】自动配置及重要注解解析

【Spring Boot】自动配置及重要注解解析
我们可以发现,spring boot在底层都帮我们预先配置了所有的组件,但是会以用户自己配置的优先
如果用户没有配,那么就默认把框架默认配置好的bean注册到容器中

4、SpringBootApplication类

首先我们先跟进run方法看下,发现在调用run之前,程序调用了SpringApplication类的构造方法
【Spring Boot】自动配置及重要注解解析
然后我们看下构造器里面做了什么
首先他判断当前项目是否为web项目(是否包含SpringBootWeb的相关依赖)
【Spring Boot】自动配置及重要注解解析
【Spring Boot】自动配置及重要注解解析
然后就是看一下接下来的getSpringFactoriesInstances()方法
这里面有一个SpringFactoriesLoader.loadFactoryNames(type, classLoader)方法
【Spring Boot】自动配置及重要注解解析
跟进去看一下,发现他会去每个依赖下读META-INF/spring.factories文件(自动装配的核心文件)
【Spring Boot】自动配置及重要注解解析
如果发现有当前接口类的实现类,就会统一放在list集合中返回
【Spring Boot】自动配置及重要注解解析
接着就根据上一步的返回结果,调用相关方法初始化相关bean的实例,进行排序后返回实例
【Spring Boot】自动配置及重要注解解析

总结:

  • SpringBoot先加载所有的自动配置类 xxxxxAutoConfiguration
  • 每个自动配置类按照条件进行生效,默认都会绑定配置文件指定的值。它会去xxxxProperties里面拿,而xxxProperties和配置文件进行了绑定
  • 生效的配置类就会给容器中装配很多组件
  • 只要容器中有这些组件,相当于这些功能就有了
  • 定制化配置
    • 直接自己@Bean替换底层的组件
    • 查看这个组件获取配置文件是哪个,就去application.properties或者yaml文件中修改对应的配置项

如有错误,欢迎指正!!文章来源地址https://www.toymoban.com/news/detail-405552.html

到了这里,关于【Spring Boot】自动配置及重要注解解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深入解析Spring Boot中的注解@PathVariable、@RequestParam、@RequestBody的正确使用

    🎉深入解析Spring Boot中的注解@PathVariable、@RequestParam、@RequestBody的正确使用 ☆* o(≧▽≦)o *☆嗨~我是IT·陈寒🍹 ✨博客主页:IT·陈寒的博客 🎈该系列文章专栏:架构设计 📜其他专栏:Java学习路线 Java面试技巧 Java实战项目 AIGC人工智能 数据结构学习 🍹文章作者技术和水平

    2024年02月04日
    浏览(54)
  • Spring Boot源码解析 - 自动装配原理

    Spring Boot 自动装配是 Spring Boot 框架的一个关键特性,它的目标是让开发者能够快速构建 Spring 应用程序,减少繁琐的配置工作。   @SpringApplication 从启动类 @SpringApplication 注解入手, @SpringBootApplication 是一个组合注解,它是 Spring Boot 框架中常用的一个主要注解之一。它结合了

    2024年01月19日
    浏览(44)
  • Spring属性注解对配置项名称的自动转换

           在Spring中,我们经常需要将配置文件中的属性值注入到Java类中。Spring提供了两个主要的注解来实现这一功能: @Value 和 @ConfigurationProperties 。其中 @ConfigurationProperties 支持将配置项名称与Java类中的属性名进行自动转换,包括 \\\' - \\\' 和\\\' 驼峰命名 \\\'的转换;而 @Value 不支

    2024年02月15日
    浏览(34)
  • 【Spring Boot 源码学习】自动装配流程源码解析(上)

    《Spring Boot 源码学习系列》 上篇博文,笔者带大家从整体上了解了AutoConfigurationImportSelector 自动装配逻辑的核心功能及流程,由于篇幅有限,更加细化的功能及流程详解还没有介绍。本篇开始将从其源码入手,重点解析细化后的自动装配流程源码。 在开始本篇的内容介绍之前

    2024年02月14日
    浏览(41)
  • 【Spring Boot 源码学习】自动装配流程源码解析(下)

    《Spring Boot 源码学习系列》 上篇博文,笔者带大家了解了自动装配流程中有关自动配置加载的流程; 本篇将介绍自动装配流程剩余的内容,包含了自动配置组件的排除和过滤、触发自动配置事件。 在开始本篇的内容介绍之前,我们先来看看往期的系列文章【有需要的朋友,

    2024年02月11日
    浏览(36)
  • Spring Boot——Spring Boot自动配置原理

    Spring Boot启动原理 一直在使用Spring Boot特别好奇的是为什么Spring Boot比Spring在项目构建和开发过程中要方便很多,无需编写大量的配置,Spring Boot自动给你配置好了。往往是集成项目依赖之后一键使用。于是小编我就学习和研究了一下Spring Boot的自动配置。 主程序入口示例 :

    2024年02月15日
    浏览(39)
  • Spring Boot 属性配置解析

    基于Spring Boot 3.1.0 系列文章 Spring Boot 源码阅读初始化环境搭建 Spring Boot 框架整体启动流程详解 Spring Boot 系统初始化器详解 Spring Boot 监听器详解 Spring Boot banner详解 Spring Boot 3.1.0 支持的属性配置方式与2.x版本没有什么变动,按照以下的顺序处理,后面的配置将覆盖前面的配置

    2024年02月09日
    浏览(48)
  • 【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理

    💓 博客主页:从零开始的-CodeNinja之路 ⏩ 收录文章:【Spring Boot】掌握Spring Boot:深入解析配置文件的使用与管理 🎉欢迎大家点赞👍评论📝收藏⭐文章 配置文件主要是为了解决硬编码带来的问题,把可能会发生改变的信息,放在⼀个集中的地方,当我们启 动某个程序时,应用程

    2024年04月23日
    浏览(40)
  • spring boot 自动配置

    自动配置介绍 Spring Boot自动装配(Auto Configuration)是Spring Boot框架的一个关键特性,它通过约定大于配置的方式来简化项目的配置过程。自动装配允许开发人员使用默认的配置,同时也可以根据需要进行定制化。Spring通过使用 @Autowired 注解、 @ComponentScan 注解以及条件化配置等

    2024年01月25日
    浏览(51)
  • Spring Boot自动配置原理

    springboot是基于spring的新型的轻量级框架,最厉害的地方当属**自动配置。**那我们就可以根据启动流程和相关原理来看看,如何实现传奇的自动配置 从上面代码可以看出,Annotation定义(@SpringBootApplication)和类定义(SpringApplication.run)最为耀眼,所以要揭开SpringBoot的神秘面纱

    2024年01月19日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包