Spring Boot Starter的面试题

2023-05-16

Spring Boot Starter的面试题

1.常见的starter会包几个方面的内容?分别是什么?

// 常见的starter会包括下面四个方面的内容

// 自动配置文件,根据classpath是否存在指定的类来决定是否要执行该功能的自动配置。

// spring.factories,非常重要,指导Spring Boot找到指定的自动配置文件。

// endpoint:可以理解为一个admin,包含对服务的描述、界面、交互(业务信息的查询)。

// health indicator:该starter提供的服务的健康指标。

两个需要注意的点:

  // 1. @ConditionalOnMissingBean的作用是:只有对应的bean在系统中都没有被创建,它修饰的初始化代码块才会执行,【用户自己手动创建的bean优先】。

// 2. Spring Boot Starter找到自动配置文件(xxxxAutoConfiguration之类的文件)的方式有两种:

// spring.factories:由Spring Boot触发探测classpath目录下的类,进行自动配置;

// @EnableXxxxx:有时需要由starter的用户触发*查找自动配置文件的过程

2.总结Spring Boot Starter的工作原理

// Spring Boot Starter的工作原理如下:

// 1. Spring Boot 在启动时扫描项目所依赖的JAR包,寻找包含spring.factories文件的JAR

// 2. 根据spring.factories配置加载AutoConfigure类

// 3. 根据 @Conditional注解的条件,进行自动配置并将Bean注入Spring Context

3.谈谈你对Spring Boot的认识。

// spring Boot是一个开源框架,它可用于创建可执行的Spring应用程序,采用了习惯优于配置的方法。此框架的神奇之处在于@EnableAutoConfiguration注解,此注解自动载入应用程序所需的所有Bean——这依赖于Spring Boot在类路径中的查找。

1. @Enable*注解

@Enable*注解并不是新发明的注解,早在Spring 3框架就引入了这些注解,用这些注解替代XML配置文件。 
很多Spring开发者都知道@EnableTransactionManagement注解,它能够声明事务管理;@EnableWebMvc注解,它能启用Spring MVC;以及@EnableScheduling注解,它可以初始化一个调度器。 

2. 属性映射

下面看MongoProperties类,它是一个Spring Boot属性映射的例子:

@ConfigurationProperties(prefix = "spring.data.mongodb")
public class MongoProperties {

    private String host;
    private int port = DBPort.PORT;
    private String uri = "mongodb://localhost/test";
    private String database;

    // ... getters/ setters omitted
}
@ConfigurationProperties注解将POJO关联到指定前缀的每一个属性。例如,spring.data.mongodb.port属性将映射到这个类的端口属性。 
强烈建议Spring Boot开发者使用这种方式来删除与配置属性相关的瓶颈代码。

3.@Conditional注解

Spring Boot的强大之处在于使用了Spring 4框架的新特性:@Conditional注解,此注解使得只有在特定条件满足时才启用一些配置。 
在Spring Boot的org.springframework.boot.autoconfigure.condition包中说明了使用@Conditional注解能给我们带来什么,下面对这些注解做一个概述:

@ConditionalOnBean
@ConditionalOnClass
@ConditionalOnExpression
@ConditionalOnMissingBean
@ConditionalOnMissingClass
@ConditionalOnNotWebApplication
@ConditionalOnResource
@ConditionalOnWebApplication

4.应用程序上下文初始化器

spring.factories还提供了第二种可能性,即定义应用程序的初始化。这使得我们可以在应用程序载入前操纵Spring的应用程序上下文ApplicationContext。 
特别是,可以在上下文创建监听器,使用ConfigurableApplicationContext类的addApplicationListener()方法。 
AutoConfigurationReportLoggingInitializer监听到系统事件时,比如上下文刷新或应用程序启动故障之类的事件,Spring Boot可以执行一些工作。这有助于我们以调试模式启动应用程序时创建自动配置的报告。 
要以调试模式启动应用程序,可以使用-Ddebug标识,或者在application.properties文件这添加属性debug= true

4.自定义springboot-starter注意事项

// 1. springboot默认scan的包名是其main类所在的包名。如果引入的starter包名不一样,需要自己添加scan。

@ComponentScan(basePackages = {"com.xixicat.demo","com.xixicat.sms"})

// 2. 对于starter中有feign的,需要额外指定

@EnableFeignClients(basePackages = {"com.xixicat.sms"})

// 3. 对于exclude一些autoConfig

@EnableAutoConfiguration(exclude = {MetricFilterAutoConfiguration.class})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot Starter的面试题 的相关文章

随机推荐

  • vnc安装和开机自启设置

    一 安装VNC 键入以下命令以在 Ubuntu 服务器上安装 TigerVNC xff1a sudo apt install tigervnc standalone server tigervnc common 现在安装了 VNC 服务器
  • 【Linux】线程安全篇Ⅰ

    文章目录 0 概述1 线程不安全举例1 1 前提知识铺垫1 2 场景模拟1 3 代码模拟 2 互斥2 1 什么是互斥2 2 互斥锁的原理 amp amp 特性2 3 互斥锁的计数器如何保证原子性2 4 互斥锁的接口2 4 1 初始化接口2
  • PX4/APM/飞控的学习笔记前言-Cxm

    开始了 开始了 终于有时间可以学习飞控了 此文章是用来当目录 我会持续更新我的学习之旅 希望能对各位有所帮助 如果有错误的地方还请各位前辈指点 此帖持续更新后续内容 其实从21年的一月就开始学习飞控一开始是从PX4开始学习 但是因为对liu
  • kubernetes 中文版

    这个文档非常好用 xff0c 建议收藏 无水印版 https pan baidu com s 1LSI46GBENd90Z06FnuaKmw lukb
  • SimpleBGC三轴云台用户手册

    SimpleBGC三轴云台用户手册 V1 00 硬件平台 xff1a STorM BGC V1 31 软件框架 xff1a SimpleBGC V1 00 本方案是采用俄版STorM BGC硬件平台 xff0c 软件采用SimpleBGC架
  • typedef和define有什么区别

    typedef和define都是替一个对象取一个别名 xff0c 以此增强程序的可读性 xff0c 区别如下 xff1a xff08 1 xff09 原理不同 define是C语言中定义的语法 xff0c 是预处理指令 xff0c 在预处理
  • 接口返回报错 resource notfound,plrase check path

    1 报错原因 post请求的content type application x www form urlencoded 但是请求体中设置的是json数据 34 date 34 34 2022 01 01 34 34 inclTransfe
  • Java中枚举的线程安全性及序列化问题

    一 枚举是如何保证线程安全的 要想看源码 xff0c 首先得有一个类吧 xff0c 那么枚举类型到底是什么类呢 xff1f 是enum吗 xff1f 答案很明显不是 xff0c enum就和class一样 xff0c 只是一个关键字 xff
  • Vscode配置Git

    vscode安装git 首先我们要确保我们下载了vscode和git xff0c 接下来就是给vscode配置git的步骤 xff1a 配置git环境变量 xff08 path值为git安装位置的cmd文件夹 xff09 xff0c 如图
  • SLAM-6视觉里程计里面特征点计算的缺点所做的改进

    缺点的改进方法 xff1a 由于之前的视觉里程计要计算关键点和描述子 xff0c 花费大量的时间 xff0c 有两种办法可以避免 1 只计算关键点 xff0c 通过光流法追踪关键点的运动 xff0c 可以得到同一个关键点在不同时刻图片的位置
  • SLAM8-后端的其他方法,BA与图优化,Pose Graph优化的理论与公式详解、因子图优化

    1 BA方法 Bundle Adjustment翻译过来是 光束调整 xff0c 意思是每个特征反射的光束 xff0c 通过调整它们的空间位置和相机姿态 xff0c 使它们都汇聚到相机光心 xff0c 这个过程叫BA 假定世界坐标系下的点p
  • 【动手学深度学习】 2预备知识

    李沫 动手学习深度学习 课程学习 需要预备的知识原因重点线性代数处理表格数据矩阵运算微积分决定以何种方式调整参数 损失函数 xff08 loss function xff09 衡量 模型有多糟糕 这个问题的分数 梯度 xff08 gradi
  • JDK源码之-java.lang.Object

    JDK源码之 java lang Object public final native Class lt gt getClass public native int hashCode public boolean equals Object
  • Apm飞控学习笔记之-电机解锁和故障保护-Cxm

    前言 CSDN https mp csdn net mp blog creation editor 122115245 这边说的解锁是指的非自动解锁和地面站解锁 常规解锁流程 61 安全开关 gt 内八解锁 这一篇会介绍整个解锁流程以及飞控
  • https://gns3.com/community/discussion/gns3-doesn-t-work-on-vmware-play

    swered Question GNS3 doesn t work on VMWARE player 15 Hi guys today I try to install GNS3 on new VMWARE player 15 with V
  • 基于stm32的数控线性稳压电源,恒压恒流电源资料

    基于stm32的数控线性稳压电源 xff0c 恒压恒流电源资料 极具学习和设计参考价值 xff0c 已验证 xff0c 可做实物 xff0c 送资料 xff0c 此价格仅为资料 xff0c 资料包括源程序 xff0c 原理图 xff0c p
  • Docker安装Elasticsearch的遇到的那些坑

    1 根据百度到的一篇文章 https segmentfault com a 1190000004376504 下载其最新镜像 hangxin1940 docker elasticsearch cn v2 1 0 使用 docker run
  • Spring boot + Spring Security + Thymeleaf 认证失败返回错误信息

    Spring boot 43 Spring Security 43 Thymeleaf 认证失败返回错误信息 Spring boot以其众多友谊的特性 xff0c 如零配置 微服务等 xff0c 吸引了很多的粉丝 而其与Spring Sec
  • Java经典面试题(其三)——JVM原理和调优

    Java经典面试题 xff08 其三 xff09 JVM原理和调优 一 什么是JVM JVM是Java Virtual Machine xff08 Java虚拟机 xff09 的缩写 xff0c JVM是一种用于计算设备的规范 xff0c
  • Spring Boot Starter的面试题

    Spring Boot Starter的面试题 1 常见的starter会包几个方面的内容 xff1f 分别是什么 xff1f span class hljs comment 常见的starter会包括下面四个方面的内容 span span