SpringBoot面经
SpringBoot面经
文章目录
- SpringBoot面经
- 一、SpringBoot的自动装配原理⭐⭐
- 二、SpringBoot的核心注解
- 三、SpringBoot starter是什么?
- 1、概述
- 2、常用的starter
- 三、SpringBoot 自动装配的方式
一、SpringBoot的自动装配原理⭐⭐
- BFPP: BeanFactoryPostProcessor
- BPP: BeanPostProcessor
- BDRPP: BeanDefinitionRegistryPostProcessor
步骤 | 描述 |
---|---|
Step1 |
1、当启动SpringBoot应用程序时,创建SpringApplication类 对象,在对象的构造方法中会进行某些参数的初始化工作,最主要的是根据@Compoment注解 标记好启动类以及初始化器和监听器。
在此过程中,会加载整个应用程序中的 |
Step2 |
2、在SpringApplication对象创建完成之后,开始执行run()方法 ,来完成整个SpringBoot的启动。
启动过程中有两个核心方法;第一个叫做 |
Step3 |
3、在prepareContext() 方法中主要完成的是对上下文对象的初始化操作,包括属性值的设置,例如环境对象属性等。
在整个过程中有一个非常重要的方法,叫做 |
Step4 |
4、在refreshContext() 方法中会进行整个容器的刷新过程,底层实际上调用的是Spring中的refresh() 方法,refresh中包含了13个关键方法,用于完成整个SpringBoot应用程序的启动。
在自动装配过程中,会调用 |
Step5 |
5、在解析 @Import注解 时,底层有一个 getImports() 方法,它会从主类开始递归 的解析注解,把所有包含了@Import的注解都解析到,然后调用processImport() 方法对Import的类进行分类。在解析@Import注解的过程中,主要识别的是AutoConfigurationImportSelect类 ,它属于ImportSelect 的子类。
在后续过程中会调用 |
Step6 |
6、自动装配过程完成之后,我们自己导入的starter包以及META/INF 文件下的spring.factories 文件中EnableConfiguation中的配置类Bean对象,就会被注入到SpringContext容器 中,由Spring容器进行管理。
|
二、SpringBoot的核心注解
在SpringBoot启动类上,有一个核心注解 @SpringBootApplication,它是三个注解的组合:
核心注解 | 作用 |
---|---|
@SpringBootConfiguration |
@SpringBootConfiguration 就是对 @Configuration 注解的封装,主要作用就是用来代替xml进行配置,其主要包括以下三个注解:
@Bean: 将配置对象交给Spring容器进行管理; |
@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面经相关推荐
- 继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错? springboot 两种方式稳定解决跨域问题
继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错???springboot 两种方式稳定解决跨域问题! 之前我写了一篇文章,来解决CORS报错 ...
- Dockerfile springboot项目拿走即用,将yml配置文件从外部挂入容器
Dockerfile 将springboot项目jar包打成镜像,并将yml配置文件外挂. # 以一个镜像为基础,在其上进行定制.就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜 ...
- SpringBoot部署脚本,拿走即用!
一个可以直接拿来使用的shell脚本,适用于springboot项目 #!/bin/bash # 这里可替换为你自己的执行程序,其他代码无需更改,绝对路径相对路径均可. # 若使用jenkins等工具 ...
- SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos
SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...
- springboot整合swagger2之最佳实践
来源:https://blog.lqdev.cn/2018/07/21/springboot/chapter-ten/ Swagger是一款RESTful接口的文档在线自动生成.功能测试功能框架. 一 ...
- SpringBoot中实现quartz定时任务
Quartz整合到SpringBoot(持久化到数据库) 背景 最近完成了一个小的后台管理系统的权限部分,想着要扩充点东西,并且刚好就完成了一个自动疫情填报系统,但是使用的定时任务是静态的,非常不利于 ...
- Springboot 利用AOP编程实现切面日志
前言 踏入Springboot这个坑,你就别想再跳出来.这个自动配置确实是非常地舒服,帮助我们减少了很多的工作.使得编写业务代码的时间占比相对更大.那么这里就讲一下面向切面的日志收集.笔者使用lomb ...
- 【Springboot】日志
springBoot日志 1.目前市面上的日志框架: 日志门面 (日志的抽象层): JCL(Jakarta Commons Logging) ...
- 【springboot】配置
配置文件 SpringBoot使用一个全局的配置文件,配置文件名是固定的: •application.properties •application.yml 配置文件的作用:修改SpringBoot自 ...
- 【springboot】入门
简介: springBoot是spring团队为了整合spring全家桶中的系列框架做研究出来的一个轻量级框架.随着spring4.0推出而推出,springBoot可以説是J2SEE的一站式解决方案 ...
最新文章
- linux编辑器翻页,Linux的Vim编辑器的使用Part1:输入模式、移动光标和翻页
- 【错误记录】eclipse,android,logcat日志无法打印,真机调试
- 复利计算再升级——连接数据库
- Linux命令Man解释:PPPD(8):点对点daemon协议
- 鸟叔linux命令大全,[鸟哥linux视频教程整理]02_01_linux操作系统及常用命令
- 在linux下运行qiime,科学网—QIIME2在Linux环境下使用遇到的问题 - 肖斌的博文
- javascript系列:NaN类型
- 今天安利一个超牛叉的黑客入侵的特效网页,我第一次打开就被惊艳到了
- AD9833信号波形谐波
- 计算机英语教学设计反思,英语教学设计与反思
- jquery+Bootstrap作品实现教程
- Scratch-(六)-妙笔生花
- SDUT第二次选拔赛 7-2魔镜与抽卡
- html相册制作成视频,怎么把照片制作成视频,视频相册制作免费软件|特效多多
- 最新出炉--IOS自动化测试环境搭建(Python Java)
- 51 nod 1024 矩阵中不重复的元素
- 13 Scrapy框架介绍
- SQL server-数据库修改与删除
- 实验向:neural-doodle amp; fast neural-doodle demo 复现流程
- 写了个真三改键盘工具
热门文章
- 【读书笔记】安全存储用户数据
- 算法导论06--红黑树构建算法
- 【技术演讲】ADN技术
- M2E模式成为当下热门 哪些项目值得关注?
- linux 词霸,Linux下的词霸
- 通用权限系统-2023V1
- reveal.js + markdown 制作幻灯片——配置选项,幻灯片背景,尺寸,插入媒体,链接
- 一文让你彻底掌握【Python中的filter函数】
- 网易笔试题——算法岗
- 在html5代码中加个时间,HTML5中video标签“事件”详解(实时监测当前播放时间)代码...