当前位置: 首页 > article >正文

Java面试题-Spring Boot

文章目录

    • 1.Spring Boot三个核心注解?
    • 2.如何自定义一个starter?
    • 3.SpringBoot自动配置原理
    • 4.SpringBoot启动流程有了解过吗?
        • 1.读取配置文件,初始化环境对象
        • 2.创建 `ApplicationContext` 容器
        • 3.注入容器(`@ComponentScan`、`@EnableAutoConfiguration`)
        • 4.依赖注入
        • 5.处理 `Aware` 接口
        • 6.初始化阶段(执行 `InitializingBean` 和 `@PostConstruct`)
        • 7.当然还有一些监听器可以对流程进行干预,直接看run方法的源码即可
    • 5.CAP定理有了解过吗?Base理论呢?

1.Spring Boot三个核心注解?

@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。

@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项, 例如:java 如关闭数据源自动配置功能: @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

@ComponentScan:Spring组件扫描。

2.如何自定义一个starter?

首先编写一个自动配置类,然后在spring.factories文件中配置使其生效,如果想要去读取配置文件就使用ConfigurationProperties指定前缀,然后在自动配置类中使用EnableConfigurationProperties启用配置类。

3.SpringBoot自动配置原理

SpringBoot的自动配置核心就是@EnableAutoConfiguration注解,这个注解有两个重要的东西:

一个是Registrar类,这个类就是为了获取到要扫描的包。

第二个就是AutoConfigurationImportSelector这个类,ImportSelector就是Spring中加载Bean的方式之一,他可以获取到加载了ImportSelector这个Bean的配置类的元数据,然后在SpringBoot中的作用其实就是加载了spring.factories这个文件,然后根据一些条件注解来完成注入容器的过程。

4.SpringBoot启动流程有了解过吗?

1.读取配置文件,初始化环境对象
2.创建 ApplicationContext 容器
3.注入容器(@ComponentScan@EnableAutoConfiguration
4.依赖注入
5.处理 Aware 接口
6.初始化阶段(执行 InitializingBean@PostConstruct

在前后分别有BeanPostProcessorBefore和BeanPostProcessorAfter

7.当然还有一些监听器可以对流程进行干预,直接看run方法的源码即可

5.CAP定理有了解过吗?Base理论呢?

C:一致性

A:可用性

P:分区容错性

Base理论:基本可用,允许出现软状态,保证最终一致性


http://www.kler.cn/a/541663.html

相关文章:

  • 深入解析 Kafka 消费者偏移量管理
  • 普通用户授权docker使用权限
  • VUE项目中实现权限控制,菜单权限,按钮权限,接口权限,路由权限,操作权限,数据权限实现
  • 如何把邮件批量导出到本地
  • Vue3+codemirror6实现公式(规则)编辑器
  • python卷积神经网络人脸识别示例实现详解
  • 海明码的认识理解与延伸
  • 【算法解析】(2)分治算法:归并排序和快速排序
  • Unity3D Shader 简析:变体与缓存详解
  • RabbitMQ学习—day2—安装
  • 2025年前端面试,性能相关的面试题汇总
  • FFMPEG3.0 增加RTSP拉取PCM音频流功能
  • Elasticsearch 7 集群搭建问题排查:常见故障解决方案与优化技巧
  • macbook键盘进残渣,按键难回弹的简单处理方法
  • web3是什么,最简单的介绍
  • vue3学习之待办事项列表(Todo List)
  • 支持向量机原理
  • 如何在Node.js中使用中间件处理请求
  • 后盾人JS -- 模块化开发
  • 小游戏源码开发之可跨app软件对接是如何设计和开发的
  • Flutter_学习记录_基本组件的使用记录_2
  • 后盾人JS -- 异步编程,宏任务与微任务
  • HTML之JavaScript对象声明
  • MySQL下载过程
  • Flink内存配置和优化
  • 五十天精通硬件设计第27天-时域频域知识