springboot常见题目

news2024/10/25 15:29:00

目录

  • 什么是IOC
  • 什么是aop
  • 什么是依赖注入
  • 自动配置原理
  • SpringBoot启动流程
  • IOC容器初始化流程
  • bean的生命周期
  • SpringMVC执行流程

什么是IOC

控制反转,由spring容器管理bean的整个生命周期。通过反射实现对其他对象的控制,包括初始化、创建、销毁等,避免手动创建对象的过程,降低类之间的耦合度。

什么是aop

面向切面编程,将公共逻辑封装成切面,跟业务代码进行分离,减少系统重复代码和降低代码耦合度。

什么是依赖注入

在spring创建对象的过程中,把对象依赖的属性注入到对象中,注入的方法主要由构造器注入和属性注入。

public class Service {
    private final Dependency dependency;

    // 构造器注入
    public Service(Dependency dependency) {
        this.dependency = dependency;
    }

    // ...
}

public class Service {
    private Dependency dependency;

    // 属性注入
    public void setDependency(Dependency dependency) {
        this.dependency = dependency;
    }

    // ...
}

自动配置原理

  1. 在主启动类上添加了@SpringBootApplication注解,这个注解组合了@EnableAutoConfiguration注解
  2. 在@EnableAutoConfiguration组合了@Import注解,导入了AutoConfigurationImportSelector类
  3. AutoConfigurationImportSelector这个类实现了ImportSelector中的selectImports方法,通过这个方法会加载META-INF/spring.factories(2.7版本,最新版是import文件)
  4. 在这个文件里面有很多自动配置类,在读取到全类名后会结合Conditional注解解析注册条件,满足条件的就注入到IOC容器中。

SpringBoot启动流程

spring启动主要是加载各种配置信息,初始化IOC容器并返回

  • 首先,当我们在启动类执行SPringApplication run的代码会做两个事情
  1. 创建SpringApplication对象;
  2. 执行run方法。
  • 其次,在创建SpringApplication对象的时候,在它的构造方法内部主要做3个事情。
  1. 确认web应用类型,servlet类型,这种类型会自动启动一个tomcat
  2. 从spring.factories配置文件中,加载默认的ApplicationContextInitializer和ApplicationListener
  3. 记录当前应用的著启动类,将来做包扫描使用
  • 最后,对象创建好后,调用run方法,在里面主要做4个事情
  1. 准备Enviroment对象,它里面会封装一些当前应用的运行环境参数,比如环境变量等等
  2. 实例化容器
  3. 容器创建好后,会为容器做一些准备工作,为容器设置Environment、BeanFactoryPostProcessor后置处理器,加载主类对应的Definition
  4. 刷新容器,在这里创建Bean实例
  • 总结来说,其实SpringBoot启动的时候核心两步,创建SpringApplication对象,调用run方法,在run方法中实例化容器,创建容器中需要的Bean实例,最终返回

IOC容器初始化流程

IOC容器的初始化,核心工作是在AbstractApplicationContext.refresh方法中完成的
在refresh中主要做了这几件事:

  1. 准备BeanFactory,在这一块需要给BeanFacory设置很多属性,比如类加载器、Environment等
  2. 执行BeanFactory后置处理器,这一阶段会扫描要放入容器中Bean信息,得到对应的BeanDefinition
  3. 注册BeanPostProcesor,
  4. 启动tomcat
  5. 实例化容器中单例Bean

总结一下,在IOC容器初始化的过程中,首先准备并执行BeanFactory后置处理器,其次得注册Bean后置处理器,并启动tomcat,最后需要借助BeanFactory完成Bean的实例化。

bean的生命周期

bean的生命周期总共有4个阶段,分别是创建对象,初始化对象,使用对象以及销毁对象,而这些工作都是交给Bean工厂的doCreateBean方法完成

  1. 创建对象阶段,先调用构造方法实例化对象,对象创建完成后,填充对象的内容,也就是依赖注入
  2. 对象创建完毕,需要进行初始化,初始化之前执行有@PostConstruct注解的方法,初始化的时候执行InitializingBean接口
  3. 完成初始化后,可以调用Bean
  4. 容器销毁前,先销毁对象,此时执行DisposableBean接口的回调,如何Bean中有标注@PreDestroy接口的函数,会先执行它

总结一下,Bean的生命周期主要有四个阶段,其中初始化对象和销毁对象可以扩展一些执行代码

SpringMVC执行流程

使用了SpringMVC,所有的请求都需要经过DispatcherServlet前端控制器,这个类提供了一个doDispatch方法,有关请求处理和结果响应的所有流程都会在这个方法中完成

  1. 用户发起向服务器发起HTTP请求,被前端控制器DispatcherServlet接收
  2. DispatcherServlet通过HandlerMapping获取到对应HandlerAdapter处理器适配器
  3. 拦截器preHandler方法
  4. 通过HandlerAdapter处理器适配器执行目标Controller方法,在这个过程中通过参数解析器和结果处理器分别解析浏览器提交的数据以及处理Controller方法返回结果
  5. 执行拦截器postHandle方法
  6. 最后处理响应,如果这个过程有异常抛出,那么执行异常的逻辑,并通过试图解析器ViewResolver解析试图,再渲染试图,最后执行拦截器afterCompletion

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2223374.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

视频智能分析平台LiteAIServer烟火识别软件引领烟火检测与识别的智能新纪元

随着人工智能技术的飞速进步,视频智能分析技术正以前所未有的深度和广度渗透至安全防护、环境监测等多个关键领域。其中,烟火识别软件LiteAIServer凭借其卓越的烟火检测与识别算法,成为了业界瞩目的焦点。 一、烟火检测:守护公共安…

汽车及零配件企业海量文件数据如何管

汽车行业特点 汽车行业是工业企业皇冠上的一颗明珠,在国民经济中占据着举足轻重的地位。汽车行业具备技术密集、创新速度快、供应链复杂等特点,具体体现为: 技术密集:汽车行业是技术密集型行业,覆盖机械、电子、软件、…

【CSS3】css开篇基础(4)

1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…

cpp的string类

本篇将讲述string类中的各种重要和常用函数(string()、begin()、rbegin()、cbegin()、crbegin()、end()、rend()、cend&am…

20241024拿掉飞凌OK3588-C的开发板linux R4启动时的LOGO

20241024拿掉飞凌OK3588-C的开发板linux R4启动时的LOGO 2024/10/24 14:20 缘起:公司的产品可能要卖到北边/敏感地区。 开机肯定有飞凌的LOGO。 要么是公司的LOGO,要么是中性的:全黑色或者是一朵花【稍微有点品味】。 所以要拿掉uboot/Kernel…

汽车级DC-DC转换器英飞凌TLF35584

上汽荣威都在用的汽车级DC-DC转换器英飞凌TLF35584 今天平台君从IPBrain数据库中给大家带来的一款由Infineon(英飞凌)推出的一款多路输出安全电源芯片,具备高可靠性和安全性。适用于汽车电子系统中的多种应用场景,如车身控制、安全气囊、防抱死制动系统,电子稳定控制系统等。…

Unity2D 人物爬楼梯

unity3d 中 实现 2d角色爬梯子功能。_哔哩哔哩_bilibiliunity3d 中 实现 2d角色爬梯子功能。, 视频播放量 2598、弹幕量 3、点赞数 28、投硬币枚数 18、收藏人数 83、转发人数 19, 视频作者 Fss1975, 作者简介 ,相关视频:寻路算法 在unity3d 中的演示&am…

repo将每个仓库回退到第一个commit的状态

文章目录 1. 获取所有仓库的列表2. 回退每个仓库到第一个 commit3. 确认状态注意事项 在使用 repo 和 git 管理 AOSP 代码时,如果你想将每个仓库都回退到其第一个 commit 的状态,你可以按照以下步骤进行操作: 1. 获取所有仓库的列表 首先&…

Windows Python安装和配置教程

文章目录 一,下载方式(一)官网下载注:下载选项说明注:查看本机操作系统位数步骤 (二)网盘下载 二,安装三,测试安装效果(一)检测安装配置&#xff…

新书速览|Spring+Spring MVC+MyBatis从零开始学(视频教学版)(第3版)

《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》 1 本书内容 SSM是当前使用广泛的Java Web开发框架。《SpringSpring MVCMyBatis从零开始学(视频教学版)(第3版)》由浅入…

【福建医科大学附属第一医院-注册安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞 …

浅谈BIM+GIS在管廊机电监控与运维管控系统中的应用

文:安科瑞郑桐 摘要:本文提出了一种城市综合管廊监控与报警集成管控平台的架构,并对以BIMGIS为核心的系统功能进行了研究和分析,通过GIS实现对管廊整体及设备设施的全局定位及管理,利用BIM实现对管廊设备的空间定位&a…

第6篇:无线与移动网络

目录 引言 6.1 无线网络的基础概念 6.2 无线局域网(WLAN)与IEEE 802.11 6.3 蓝牙与无线个域网(WPAN) 6.4 无线城域网(WMAN)与WiMax 6.5 ZigBee与智能家居 6.6 移动蜂窝网络(3G/4G/5G&…

SpringColoud GateWay 核心组件

优质博文:IT-BLOG-CN 【1】Route路由: Gateway的基本构建模块,它由ID、目标URL、断言集合和过滤器集合组成。如果聚合断言结果为真,则匹配到该路由。 Route路由-动态路由实现原理: 配置变化Apollo 服务地址实例变化…

AMD XILINX 20nm器件价格上调25%

随着市场回暖,台积电也在调整价格策略,近期台积电上调了20nm的出厂价格。 据相关消息显示,AMD为了保障持续的供货和服务,也计划将20nm器件的价格统一上调25%,预计将于11月发布正式的涨价通知,并于2025年Q1开…

七,Linux基础环境搭建(CentOS7)- 安装Scala和Spark

Linux基础环境搭建(CentOS7)- 安装Scala和Spark 大家注意以下的环境搭建版本号,如果版本不匹配有可能出现问题! 一、Scala下载及安装 Scala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现…

基于Java+SpringBoot+Vue的宠物咖啡馆平台的设计与实现

基于JavaSpringBootVue的宠物咖啡馆平台的设计与实现 前言 ✌全网粉丝20W,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末附源码下载链接&#…

ubuntu编译kaldi和vosk

文章目录 前言一、开源框架的选取二、kaldi编译三、编译vosk方案一方案二 前言 由于工作需要语音识别的功能,环境是在linux arm版上,所以想先在ubuntu上跑起来看一看,就找了一下语音识别的开源框架,选中了vosk这个开源库&#xf…

微软:全球每天网络攻击超6亿次

《2024年微软数字防御报告》揭示了一个复杂的全球网络安全格局,每天发生超过6亿次网络攻击。报告强调了勒索软件、网络钓鱼和身份泄露事件的增加,以及网络犯罪团伙和国家行为者之间的合作。它强调了人工智能在攻击和防御中的重要作用,敦促组织…

基于SpringBoot的“高校校园点餐系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“高校校园点餐系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 前台首页功能界面图 用户注册、登录界面图 我…