SpringBoot面试准备 第二天

SpringBoot自动配置原理?

@SpringBootApplication 注解标注在某个类上说明

  • 这个类是 SpringBoot 的主配置类
  • SpringBoot 通过运行这个类的 main 方法来启动 SpringBoot 应用

 @SpringBootApplication注解是一个组合注解,主要是由元注解(@Target,@Retention,@Documented,@Inherited)和三个注解:

  • @SpringBootConfiguration:该注解表示这是一个 SpringBoot 的配置类
  • @ComponentScan:开启组件扫描
  • EnableAutoConfiguration开启自动配置,重点就在这个配置当中

        “约定大于配置”,那SpringBoot是怎么做的呢?其实靠的就是@EnableAutoConfiguration注解;简单来说,这个注解可以帮助我们自动载入应用程序所需要的所有默认配置

@AutoConfigurationPackage自动配置包扫描
@Import

给IOC容器导入组件  

  

 

@AutoConfigurationPackage 

        Spring Boot 提供的注解,用于自动配置包扫描。通过在主配置类上添加该注解,可以告诉 Spring Boot 自动配置机制,将主配置类所在的包及其子包作为组件扫描的基础包,简化了组件扫描的配置过程

        @AutoConfigurationPackage 跟@ComponentScan注解一样的作用,但是扫描的对象不一样,比如说,你用了Spring Data JPA,可能会在实体类上写@Entity注解。这个@Entity注解由 @AutoConfigurationPackage扫描并加载,而我们平时开发用的@Controller/@Service/@Component/@Repository这些注解是由@ComponentScan来扫描并加载的

@Import(AutoConfigurationImportSelector.class)

        该注解给当前配置类导入自动配置类,其导入的AutoConfigurationImportSelector类中的selectImports()方法,通过SpringFactoriesLoader.loadFactoryNames()扫描所有具有META-INF/spring.factories的jar包,然后返回需要导入的组件的全类名。

自动配置原理

  1. @EnableAutoConfiguration 是 Spring Boot 提供的注解,用于启用自动配置
  2.  Spring Boot 启动过程中,Spring 会扫描所有的 jar 路径下的 META-INF/spring.factories 文件(通过 @Import(AutoConfigurationImportSelector.class) 导入了 AutoConfigurationImportSelector 类来实现的),将其包装成 Properties 对象

  3. 从这个 Properties 对象中获取 key 值为 EnableAutoConfiguration 的数据,这些数据都是 Spring Boot 默认配置好的配置文件数据

  4. 根据配置数据自动加载和应用相应的自动配置类,以实现自动配置的功能

  @Import(AutoConfigurationImportSelector.class) 是 @EnableAutoConfiguration 注解的核心部分:作用是将 AutoConfigurationImportSelector 类导入到 IOC 容器中,并根据 EnableAutoConfiguration 的配置数据,自动加载相应的自动配置类。

        自动配置类是 Spring Boot 提供的一系列配置类,用于根据应用程序的依赖和配置,自动配置相应的组件。这些自动配置类会根据配置文件中的属性值,自动创建并注册相应的 Bean,以实现自动配置的功能。

SpringBoot常用的配置形式,按照配置生效的优先级从高到低排列?

  1. 命令行参数:通过在启动应用程序时传递命令行参数,可以覆盖配置文件中的相应配置项。例如,使用 `--server.port=8080` 可以指定应用程序的端口号为 8080
  2. 操作系统环境变量:可以通过设置操作系统的环境变量来配置应用程序。Spring Boot 会自动将环境变量映射到相应的配置项上。例如,设置名为 `SPRING_APPLICATION_JSON` 的环境变量,可以传递 JSON 格式的配置信息给应用程序
  3. 配置文件:Spring Boot 支持多种配置文件格式,包括 YAML 文件(以 yml或yaml后缀)和 Properties 文件(以properties后缀)。配置文件通常位于应用程序的 classpath下,可以包含多个配置项。如果存在多个配置文件 。                                                                                          优先级从高到低为:application.yml > application.properties> application-{profile}.yml> application-{profile}.properties,其中 {profile} 是当前激活的配置文件
  4. @Configuration注解类上的 @PropertySource指定的配置文件:可以在 @Configuration注解的类上使用 @PropertySource注解指定一个或多个配置文件。这些配置文件的优先级低于上述的全局配置文件,但高于默认的配置值。通过这种方式,可以将特定的配置文件与特定的配置类关联

什么是 YAML?

        一种易读的数据序列化语言。它的设计目标是提供一种简洁、可读性强的数据格式,适用于配置文件和数据交换

        与其他数据序列化格式相比,如 JSON 或 XML,YAML 的语法更加简洁和易读。它使用缩进和空格来表示层级关系,使用冒号来表示键值对,使用短横线来表示列表,使得配置文件的结构更加清晰和可读性强。

        YAML 在许多应用场景中被广泛使用,特别是在 Spring Boot 和其他许多开发框架中作为配置文件的首选格式。它不仅可以用于简单的键值对配置,还支持复杂的数据结构,如嵌套的映射、列表和引用等 

YAML 配置的优缺点?

优点缺点
  1. 可读性强:YAML 使用缩进和空格来表示层级关系,使用冒号来表示键值对,使得配置文件的结构更加清晰和易读。相比于其他格式,如 JSON 或 XML,YAML 更加直观和易于理解。
  2. 简洁性:YAML 的语法相对简洁,可以用较少的字符表示相同的数据结构。相比于 XML,YAML 的配置文件通常更加简洁和精简。
  3. 支持复杂数据结构:YAML 支持嵌套的映射、列表和引用等复杂数据结构,可以灵活地表示各种配置需求。
  4. 可扩展性:YAML 支持自定义标签和类型,可以根据需要扩展和定制配置文件的语义。
  1. 学习曲线:相比于其他格式,如 JSON 或 Properties 文件,YAML 的语法可能对于一些开发者来说需要一定的学习成本。尤其是对于没有接触过 YAML 的开发者来说,可能需要一些时间来熟悉和理解其语法规则。
  2. 语法敏感性:YAML 的语法对于缩进和空格的使用非常敏感,不正确的缩进或空格可能导致配置文件解析错误。这可能会增加调试和排查问题的难度。
  3. 不适合大型配置:对于大型配置文件,YAML 的层级结构可能会变得复杂,不易于维护和管理。在这种情况下,可能需要考虑其他更适合的配置格式。

Spring Boot 是否可以使用 XML 配置 ?

        Spring Boot 推荐使用 Java 配置而非 XML 配置,但是 Spring Boot 中也可以使用 XML 配置,通过@ImportResource 注解可以引入一个 XML 配置

spring boot 核心配置文件是什么?bootstrap.properties 和application.properties 有何区别 ?

        核心的两个配置文件是 bootstrap.yml(或 bootstrap.properties)和 application.yml(或 application.properties

bootstrap.ymlapplication.yml
加载顺序Spring Boot 启动时最早加载的配置文件,用于配置应用程序的基础设施,如连接远程配置服务器等是在 bootstrap.properties 加载后,应用程序开始启动之前加载的配置文件,用于配置应用程序的具体业务逻辑
作用范围 主要用于配置 Spring Cloud 相关的属性,如配置中心、服务注册和发现等用于配置应用程序的具体业务逻辑,如数据库连接、日志配置、缓存配置等
配置继承

        application.properties 可以继承 bootstrap.properties 中的配置。这意味着,如果在 bootstrap.properties 中配置了某些属性,而在 application.properties 中没有重新定义,那么应用程序会使用 bootstrap.properties 中的配置

  • 23
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值