springboot常见题目

目录

  • 什么是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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

007、链表的回文结构

0、题目描述 链表回文结构 1、法1 一个复杂的问题可以拆解成几个简单的问题,找中间节点和逆置链表(翻转链表)之前都做过。 class PalindromeList { public://1、找中间节点ListNode* FindMid(ListNode* A){if (A nullptr || A->next …

博客搭建之路:hexo搜索引擎收录

文章目录 hexo搜索引擎收录以百度为例 hexo搜索引擎收录 hexo版本5.0.2 npm版本6.14.7 next版本7.8.0 写博客的目的肯定不是就只有自己能看到,想让更多的人看到就需要可以让搜索引擎来收录对应的文章。hexo支持生成站点地图sitemap 在hexo下的_config.yml中配置站点…

‘perl‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

‘perl’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 明明已经根据教程安装了perl环境,但是在cmd中依赖报该错误,本章教程提供解决办法。 一、激活perl环境 state shell ActiveState-Perl-5.36.0此时输入perl -v 是可以直接输出perl版本号的。 二、找到perl的执…

跨域的几种情况和如何解决跨域问题

在网站开发中,经常会遇到跨域问题,下面总结一下集中常见的跨域问题。 1. 不同域名属于跨域,如:www.a.com 和www.b.com,另外www.a.com 和www.a.com.cn也属于不同域名。 2. 主域名和子域名(二级域名、三级域…

192×144像素是几寸照片?如何手机拍照制作

在数字摄影时代,像素是衡量照片质量的重要指标之一。那么,192144像素的照片相当于多少英寸呢?又如何使用手机拍摄并制作这样的照片呢?本文将为您解答。 首先,我们需要了解像素和英寸之间的关系。像素是图像的最小单位&…

分布式篇(分布式事务)(持续更新迭代)

一、事务 1. 什么是事务 2. 事务目的 3. 事务的流程 4. 事务四大特性 原子性(Atomicity) 一致性(Consistency) 持久性(Durability) 隔离性(Isolation) 5. MySQL VS Oracle …

14款被严重低估的安全红队测试工具推荐,网络攻防|网络安全必看的工具合集推荐!

大家好,我是小强 工具往往可以决定网络安全渗透测试或红队演练活动的成败。虽然Kali中的许多工具都已经过验证且稳定可靠,但并不能适合所有渗透测试场景。对于安全红队而言,需要在不同测试需求下,确保有足够的装备来实现测试目标…

洞见数据未来,StarRocks Summit Asia 2024 即将启幕!

在 AI 时代,我们需要怎样的数据基础软件? 数据量和数据类型的需求飞速上涨,我们不仅需要将历史上各种基础设施中的数据进行分析使用,还要关注性能、灵活性、性价比,以及确保单一可信数据源。这一切构成了当前大数据领…

三维管线管网建模工具MagicPipe3D V3.5.3

经纬管网建模系统MagicPipe3D,本地离线参数化构建地下管网三维模型(包括管道、接头、附属设施等),输出标准3DTiles、Obj模型等格式,支持Cesium、Unreal、Unity、Osg等引擎加载进行三维可视化、语义查询、专题分析&…

喜报!腾讯云存储获第三届“鼎新杯”优秀案例!

引言 2024年9月24日-25日,由中国通信标准化协会主办、中国信息通信研究院(简称“中国信通院”)承办、中国通信企业协会支持的“2024数字化转型发展大会”在北京召开。大会公布了第三届“鼎新杯”数字化转型应用大赛案例评选结果。 腾讯云存…

预算不够,怎么跟KOL砍价?(内附砍价模板)

​在当今的数字营销时代,海外红人(KOL)的影响力不容小觑。他们的一篇帖子、一个视频,甚至是一张照片,都有可能为企业带来巨大的流量和销量。 当企业满怀希望地找到一位粉丝众多、影响力强的KOL,准备洽谈合作…

2024年双十一有什么必买好物推荐?双11最值得关注的宝藏好物分享

​随着2024年双十一购物狂欢节的到来,各种实用且富有创意的小物件成为了大家关注的焦点。在这场全民参与的购物盛宴中,一款既能满足日常需求又能提升生活便捷性的宝藏好物——充电宝,成为了许多人心目中的首选。无论是忙碌的上班族&#xff0…

【前端Vue学习笔记】组件注册方式 组件传递数据 组件事件 透传 插槽slot 组件生命周期 动态组件 异步组件 依赖注入 Vue应用

文章目录 组件注册方式全局注册全局注册的缺点推荐使用局部注册步骤 组件传递数据-Props步骤注意事项 组件传递多种数据类型组件传递Props效验默认值必选项注意警告 组件事件父组件代码子组件代码 组件之间传递数据的方案父传子子传父 组件事件配合v-model使用步骤:…

linux网络编程5——Posix API和网络协议栈,使用TCP实现P2P通信

文章目录 Posix API和网络协议栈,使用TCP实现P2P通信1. socket()2. bind()3. listen()4. connect()5. accept()6. read()/write(), recv()/send()7. 内核tcp数据传输7.1 TCP流量控制7.2 TCP拥塞控制——慢启动/拥塞避免/快速恢复/快速重传 8. shutdown()9. close()9…

【线下培训】龙信科技应邀参与了由教育部网络安全与执法虚拟教研室(中国刑事警察学院)举办的学术讲座

文章关键词:电子数据取证培训、产学研推进、手机取证、介质取证 2024年10月23日,龙信科技应邀参与了由教育部网络安全与执法虚拟教研室(中国刑事警察学院)举办的学术讲座。在这次学术交流中,我们公司的技术专家陈杰以…

Redis Search系列 - 第一讲 创建索引

目录 一、引言二、全文检索基本概念三、创建索引 一、引言 Redis Search 是 Redis 的一个模块,用于提供全文搜索和二级索引功能。它允许在 Redis 数据库中执行复杂的搜索查询,并支持多种数据类型和查询操作。以下是 Redis Search 的一些关键特性&#x…

学习threejs,使用canvas样式化粒子

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.PointCloud简介1.11 …

Vue3+ts+vite自动导入vue的依赖

Vue3tsvite自动导入vue的依赖 unplugin-auto-import 主要依赖 npm i -D unplugin-auto-import// vite.config.ts import AutoImport from unplugin-auto-import/viteexport default defineConfig({plugins: [AutoImport({ imports: ["vue", "vue-router"…

团体标准审查结果一般会有哪几种情况?

1. 通过: • 标准质量高:标准的内容符合国家法律法规和相关标准的要求,技术指标科学、合理、先进,具有较强的适用性和可操作性 • 材料完整规范:送审材料齐全,标准的格式、文本编写等符合规定,为…

深入拆解TomcatJetty——Tomcat生命周期与多层容器

深入拆解Tomcat&Jetty(三) 专栏地址:https://time.geekbang.org/column/intro/100027701 1 Tomcat组件生命周期 Tomcat如何如何实现一键式启停 Tomcat 架构图和请求处理流程如图所示: 对组件之间的关系进行分析,…