SpringBoot面经

文章目录

  • SpringBoot面经
  • 一、SpringBoot的自动装配原理⭐⭐
    • 二、SpringBoot的核心注解
  • 三、SpringBoot starter是什么?
    • 1、概述
    • 2、常用的starter
  • 三、SpringBoot 自动装配的方式

一、SpringBoot的自动装配原理⭐⭐

  • BFPP: BeanFactoryPostProcessor
  • BPP: BeanPostProcessor
  • BDRPP: BeanDefinitionRegistryPostProcessor
步骤 描述
Step1 1、当启动SpringBoot应用程序时,创建SpringApplication类对象,在对象的构造方法中会进行某些参数的初始化工作,最主要的是根据@Compoment注解标记好启动类以及初始化器和监听器。

在此过程中,会加载整个应用程序中的spring.factories文件,将文件内容放到缓存cache中,方便后续启动类注解解析时调用;

Step2 2、在SpringApplication对象创建完成之后,开始执行run()方法,来完成整个SpringBoot的启动。

启动过程中有两个核心方法;第一个叫做prepareContext(),第二个叫做refreshContext()SpringBoot在着两个关键步骤中完成了自动装配的核心功能,处理逻辑包含了上下文对象的创建,banner的打印,异常报告期的准备等前期准备工作,方便后续进行调用;

Step3 3、在prepareContext()方法中主要完成的是对上下文对象的初始化操作,包括属性值的设置,例如环境对象属性等。

在整个过程中有一个非常重要的方法,叫做load();它主要完成一件事,就是将当前启动类封装成一个BeanDefinition对象注册到registry中,方便后续进行BeanFactoryPostProcessor调用执行的时候,找到对应的主类,完成@SpringBootApplication@EnableAutoConfiguration等注解的解析工作;

Step4 4、在refreshContext()方法中会进行整个容器的刷新过程,底层实际上调用的是Spring中的refresh()方法,refresh中包含了13个关键方法,用于完成整个SpringBoot应用程序的启动。

在自动装配过程中,会调用invokeBeanFactoryPostProcessor()方法,然后执行的时候底层有一个核心方法postProcessBeanDefinitionRegistry()方法,它会解析处理各种注解,包括@PropertySource@ComponentScans@Bean@Import 等注解,最主要的还是@Import注解;

Step5 5、在解析 @Import注解 时,底层有一个 getImports() 方法,它会从主类开始递归的解析注解,把所有包含了@Import的注解都解析到,然后调用processImport()方法对Import的类进行分类。在解析@Import注解的过程中,主要识别的是AutoConfigurationImportSelect类,它属于ImportSelect的子类。

在后续过程中会调用deferredImportSelectHandler中的process()方法,来完成EnableAutoConfiguration的加载;

Step6 6、自动装配过程完成之后,我们自己导入的starter包以及META/INF文件下的spring.factories文件中EnableConfiguation中的配置类Bean对象,就会被注入到SpringContext容器中,由Spring容器进行管理。

二、SpringBoot的核心注解

在SpringBoot启动类上,有一个核心注解 @SpringBootApplication,它是三个注解的组合:

核心注解 作用
@SpringBootConfiguration @SpringBootConfiguration 就是对 @Configuration 注解的封装,主要作用就是用来代替xml进行配置,其主要包括以下三个注解:

@Bean: 将配置对象交给Spring容器进行管理;
@ImportResource: 无法通过@Configuration方式配置的对象,可以通过此注解引入额外的xml配置;
@Import: 用于引入一个或者多个@Configuration修饰的配置文件类;

@ComponentScan @ComponentScan注解的作用就是开启组件扫描,可以自动扫描指定包路径下的 @Component 注解类并将Bean对象注册到context容器中;
@EnableAutoConfiguration
自动装配的核心注解
@EnableAutoConfiguration注解的主要作用就是提供 自动装配功能,注解的关键是AutoConfigurationImportSelector(自动配置文件收集器),用于收集配置文件中的配置工厂类,然后通过springfactories机制加载配置文件,具体就是从classpath类路径下,找到配置文件META-INF/spring.factories来配置加载AutoConfigure类,并根据注解@Conditional注解的条件进行去重与过滤,进行自动配置并将Bean注入到Spring Context中;

三、SpringBoot starter是什么?

1、概述

  • 使用Spring + SpringMVC框架进行开发的时候,如果需要引入mybatis框架,那么需要在xml中定义需要的bean对象,这个过程很明显是很麻烦的,如果需要引入额外的其他组件,那么也需要进行复杂的配置,因此在springboot中引入了starter;
  • starter就是一个jar包,写一个@Configuration的配置类,将这些bean定义在其中,然后再starter包的META-lNF/spring.factories中写入配置类,那么springboot程序在启动的时候就会按照约定来加载该配置类
  • 开发人员只需要将相应的startert包依赖进应用中,进行相关的属性配置,就可以进行代码开发,而不需要单独进行bean对象的配置,从而实现一站式开发

2、常用的starter

starter 描述
spring-boot-starter 核心 starter,包括自动化配置支持,日志以及 YAML
spring-boot-starter-aop Spring AOP 和 AspectJ 相关的切面编程 starter
spring-boot-starter-jdbc 使用 HikariCP 连接池 JDBC 的 starter
spring-boot-starter-security 使用 Spring Security 的 starter
spring-boot-starter-web 构建 restful、springMVC 的 web应用程序的 starter
spring-boot-starter-freemarker 静态页面化技术
spring-boot-starter-thymeleaf 页面解析模板等
spring-boot-starter-redis redis的相关依赖
spring-boot-starter-elasticsearch ES搜索引擎的相关依赖
spring-boot-starter-amqp 消息队列MQ的相关依赖
mybatis-spring-boot-starter 用于整合mybatis框架
mybatis-plus-boot-starter 用于整合mybatis-plus框架
pagehelper-spring-boot-starter 用于整合PageHelper处理Mybatis查询分页

三、SpringBoot 自动装配的方式

模式 描述
no 缺省情况下,自动配置通过ref属性手动指定,最常用的方式
byName 根据bean的名称进行自动装配
btType 按照指定数据类型自动装配,如果存在多个同类型对象,则会报错
constructor 通过调用类的构造函数来注入依赖项
autodetect 优先按照constructor模式装配,若找不到构造器,则根据btType模式装配

SpringBoot面经相关推荐

  1. 继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错? springboot 两种方式稳定解决跨域问题

    继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错???springboot 两种方式稳定解决跨域问题! 之前我写了一篇文章,来解决CORS报错 ...

  2. Dockerfile springboot项目拿走即用,将yml配置文件从外部挂入容器

    Dockerfile 将springboot项目jar包打成镜像,并将yml配置文件外挂. # 以一个镜像为基础,在其上进行定制.就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜 ...

  3. SpringBoot部署脚本,拿走即用!

    一个可以直接拿来使用的shell脚本,适用于springboot项目 #!/bin/bash # 这里可替换为你自己的执行程序,其他代码无需更改,绝对路径相对路径均可. # 若使用jenkins等工具 ...

  4. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos

    SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...

  5. springboot整合swagger2之最佳实践

    来源:https://blog.lqdev.cn/2018/07/21/springboot/chapter-ten/ Swagger是一款RESTful接口的文档在线自动生成.功能测试功能框架. 一 ...

  6. SpringBoot中实现quartz定时任务

    Quartz整合到SpringBoot(持久化到数据库) 背景 最近完成了一个小的后台管理系统的权限部分,想着要扩充点东西,并且刚好就完成了一个自动疫情填报系统,但是使用的定时任务是静态的,非常不利于 ...

  7. Springboot 利用AOP编程实现切面日志

    前言 踏入Springboot这个坑,你就别想再跳出来.这个自动配置确实是非常地舒服,帮助我们减少了很多的工作.使得编写业务代码的时间占比相对更大.那么这里就讲一下面向切面的日志收集.笔者使用lomb ...

  8. 【Springboot】日志

    springBoot日志 1.目前市面上的日志框架: 日志门面 (日志的抽象层):                JCL(Jakarta Commons Logging)                ...

  9. 【springboot】配置

    配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的: •application.properties •application.yml 配置文件的作用:修改SpringBoot自 ...

  10. 【springboot】入门

    简介: springBoot是spring团队为了整合spring全家桶中的系列框架做研究出来的一个轻量级框架.随着spring4.0推出而推出,springBoot可以説是J2SEE的一站式解决方案 ...

最新文章

  1. linux编辑器翻页,Linux的Vim编辑器的使用Part1:输入模式、移动光标和翻页
  2. 【错误记录】eclipse,android,logcat日志无法打印,真机调试
  3. 复利计算再升级——连接数据库
  4. Linux命令Man解释:PPPD(8):点对点daemon协议
  5. 鸟叔linux命令大全,[鸟哥linux视频教程整理]02_01_linux操作系统及常用命令
  6. 在linux下运行qiime,科学网—QIIME2在Linux环境下使用遇到的问题 - 肖斌的博文
  7. javascript系列:NaN类型
  8. 今天安利一个超牛叉的黑客入侵的特效网页,我第一次打开就被惊艳到了
  9. AD9833信号波形谐波
  10. 计算机英语教学设计反思,英语教学设计与反思
  11. jquery+Bootstrap作品实现教程
  12. Scratch-(六)-妙笔生花
  13. SDUT第二次选拔赛 7-2魔镜与抽卡
  14. html相册制作成视频,怎么把照片制作成视频,视频相册制作免费软件|特效多多
  15. 最新出炉--IOS自动化测试环境搭建(Python Java)
  16. 51 nod 1024 矩阵中不重复的元素
  17. 13 Scrapy框架介绍
  18. SQL server-数据库修改与删除
  19. 实验向:neural-doodle amp; fast neural-doodle demo 复现流程
  20. 写了个真三改键盘工具

热门文章

  1. 【读书笔记】安全存储用户数据
  2. 算法导论06--红黑树构建算法
  3. 【技术演讲】ADN技术
  4. M2E模式成为当下热门 哪些项目值得关注?
  5. linux 词霸,Linux下的词霸
  6. 通用权限系统-2023V1
  7. reveal.js + markdown 制作幻灯片——配置选项,幻灯片背景,尺寸,插入媒体,链接
  8. 一文让你彻底掌握【Python中的filter函数】
  9. 网易笔试题——算法岗
  10. 在html5代码中加个时间,HTML5中video标签“事件”详解(实时监测当前播放时间)代码...