Spring面试篇

Spring面试篇

  • 前置知识
    • ApplicationContextInitializer
    • ApplicationListener
    • BeanFactory
    • BeanDefinition
    • BeanFactoryPostProcesssor
    • Aware
    • InitialzingBean,DisposableBean
    • BeanPostProcessor
  • SpringBoot启动流程
  • IOC容器初始化流程
  • Bean生命周期
  • Bean循环依赖
    • 解决
  • SpringMvc执行流程


前置知识

ApplicationContextInitializer

IOC容器对象创建完成后执行,可以对上下文环境做一些操作,例如运行环境属性注册等
在这里插入图片描述

ApplicationListener

监听容器发布的事件,允许程序员执行自己的代码,完成事件的驱动开发,它可以监听容器初始化完成,初始化失败等事件。通常情况下可以使用监听器加载资源,开启定时任务等
在这里插入图片描述

BeanFactory

Bean容器的根接口,提供Bean对象的创建、配置、依赖注入等功能
在这里插入图片描述

BeanDefinition

用于描述Bean,包括Bean的名称,Bean的属性,Bean的行为,实现的接口,添加的注解等等,Spring中,Bean在创建之前,都需要封装成对应的BeanDefinition,然后根据BeanDefinition进一步创建Bean对象
在这里插入图片描述

BeanFactoryPostProcesssor

Bean工厂后置处理器,当BeanFactory准备好了后(Bean初始化之前),会调用该接口的postProcessFactory方法,经常用于新增BeanDefinition
在这里插入图片描述

Aware

感知接口,Spring提供的一种机制,通过实现该接口,重写方法,可以感知Spring应用程序执行过程中的一些变化。Spring会判断当前Bean有没有实现Aware接口,如果实现了,会在特定的时机回调接口对应的方法
在这里插入图片描述

InitialzingBean,DisposableBean

  • afterPropertiesSet方法
    初始化接口,当Bean被实例化好后,会回调里面的函数,经常用于做一些加载资源的工作

  • destroy方法
    销毁接口,当Bean被销毁之前,会回调里面的函数,经常用于做一些释放资源的工作

在这里插入图片描述

直接使用@PostConstruct、@PreDestroy注解
在这里插入图片描述

BeanPostProcessor

Bean的后置处理器,当Bean对象初始化之前以及初始化之后,会回调该接口对应的方法
在这里插入图片描述

SpringBoot启动流程

其本质就是加载各种配置信息,然后初始化IOC容器并返回。

SpringBoot启动的时候核心就两步,创建SpringApplication对象以及run方法的调用,在run方法中会真正的实例化容器,并创建容器中需要的Bean实例,最终返回。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

IOC容器初始化流程

IOC容器初始化,核心工作是在AbstractApplicationContext.refresh方法中完成。

首先准备并执行BeanFactory后置处理器,其次得注册Bean后置处理器,并启动tomcat,最后需要借助BeanFactory完成Bean的实例化。
在这里插入图片描述
在这里插入图片描述

Bean生命周期

有四个阶段,创建对象,初始化对象,使用对象,销毁对象,而且这些工作大部分是交给Bean工厂的doCreateBean方法完成的
在这里插入图片描述

Bean循环依赖

Bean的循环依赖指的是A依赖B,B又依赖A这样的闭环问题。

解决

通过三个对象缓存区来解决循环依赖问题

首先,调用A的构造方法实例化A,当前的A还没有处理依赖注入,暂且把它称为半成品,把半成品A封装到一个ObjectFactory中,并存储到springFactories缓存区

要处理B的依赖注入,把半成品A注入给B,B的依赖注入处理完成,B就创建完毕

在这里插入图片描述

SpringMvc执行流程

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

核心的,通过HardlerAdapter处理器适配器执行目标Controller的方法,这个过程中会通过参数解析器和结果处理器分别解析浏览器提交的数据以及处理Controller方法返回的结果。
在这里插入图片描述

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

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

相关文章

Java-IO流-15

文件操作 文件创建 package com.edu.file;import org.junit.jupiter.api.Test;import java.io.File; import java.io.IOException;public class Demo01 {public static void main(String[] args) {}Test//方式1public void create01(){String filePath "D:\\new1.txt&q…

阿里云服务器地域如何选择?

阿里云服务器地域和可用区怎么选择?地域是指云服务器所在物理数据中心的位置,地域选择就近选择,访客距离地域所在城市越近网络延迟越低,速度就越快;可用区是指同一个地域下,网络和电力相互独立的区域&#…

JSP+Servlet 重要知识点 (含面试题)

JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。 这里提一句: jsp已经没有深入学习的必要了,除了维护老项目能用上一些,基本属于被淘汰的边缘了。Servlet还是有必要学习一下,比如sp…

Java:Stream流

文章目录 1、体验Stream流2、Stream流的常见生成方式3、Stream流中间操作方法4、Stream流终结操作方法5、Stream流的收集操作6、Stream流综合练习6.1 练习16.2 练习26.3 练习3 以下代码使用JDK11编写。 1、体验Stream流 (1)案例需求 按照下面的要求完成…

如何使用css隐藏掉滚动条

1.解决方案 在滚动元素上再包裹一个父元素,然后,该元素添加如下代码: (注:PC端浏览器滚动条为8px)使元素偏移原来位置8px,目的就是将滚动条区域移动到父元素边框外面,然后&#xff…

AI教我学编程之AI自刀

AI教我学编程系列学习第二课 — C#变量类型 上节回顾知识梳理C#基本变量类型 对话AI分歧产生本段总结 它说得对吗?我随即发问经典AI自刀他来了 总结 上节回顾 在上一节中我们发现,AI工具似乎还不能达到教学的水平,所以在本节中,…

ORA-600 adg无法查询故障

再续前缘 ORA-600[12406]故障解决-CSDN博客 当你点背的时候,看似一个简单的case,总是会迎来反转 上次改完参数没两天,又出现了报错不同,但是现象相似的情况 这次是 ORA-600 [kksgaGetNoAlloc_Int0] 这次出现故障的范围更大&a…

【Spring Boot 源码学习】SpringApplication 的定制化介绍

Spring Boot 源码学习系列 SpringApplication 的定制化介绍 一、引言二、往期内容三、主要内容1. 基础配置1.1 设置关闭 Banner1.2 设置自定义 Banner 打印对象1.3 设置应用程序主入口类1.4 设置用于创建应用程序上下文的工厂1.5 添加 BootstrapRegistry 初始化器实现1.6 设置或…

Python学习之路——函数进阶

目录 一、函数的多返回值 (一)如何操作 (二)代码示例 二、函数的多种传参方式 (一)位置参数 (二)关键字参数 (三)缺省参数 1、定义 2、作用 3、代码示…

Spring之代理模式

1、概念 1.1 介绍 二十三种设计模式中的一种,属于结构型模式。它的作用就是通过提供一个代理类,让我们在调用目标方法的时候,不再是直接对目标方法进行调用,而是通过代理类间接调用。让不属于目标方法核心逻辑的代码从目标方法中…

互联网分布式应用之SpringCloud

SpringCloud Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. 微服务项目介绍 2. Eure…

C++ goto语句

作用:可以无条件跳转语句,类似计算机组成原理mips指令集中的jump直接跳转指令(汇编语言)。 语法:goto标记; 解释:如果标记的名称存在,执行到goto语句时,会跳转到标记的…

小游戏实战丨基于PyGame的贪吃蛇小游戏

文章目录 写在前面PyGame贪吃蛇注意事项系列文章写在后面 写在前面 本期内容:基于pygame的贪吃蛇小游戏 下载地址:https://download.csdn.net/download/m0_68111267/88700188 实验环境 python3.11及以上pycharmpygame 安装pygame的命令:…

python实现windows内存看门狗程序(带GUI界面)

python实现windows内存看门狗程序(带GUI界面) 效果图 1、程序核心 看门狗程序核心: 1、运行特定程序任务进程 2、监控任务管理器上的内存使用率 3、如果超过阈值则关闭该特定程序进程 4、重新开启该特定程序 5、重复过程2持续监控2、程序流…

Spring Boot 基础知识点1 (含面试题1)

Spring Boot 是一款基于 Spring 框架的开源应用程序开发工具,它旨在简化 Spring 应用程序的配置和开发过程。Spring Boot 提供了一种简单的方式来创建可独立运行的、生产级别的应用程序,并在需要时进行部署。Spring Boot 在微服务架构和云计算环境下得到…

thinkphp6实现简单定时任务

thinkphp6实现定时任务 创建定时任务文件定义指令编写Test.php代码运行测试 创建定时任务文件 Test类名根据自己的需要修改 php think make:command Test testcommand文件夹在app目录下没有需要自己创建 运行上面的命令后会在command下 多一个Test.php文件 定义指令 在conf…

PHP代码审计之实战审代码篇2

4. 仔细观察如下代码&#xff0c;思考代码有什么缺陷&#xff0c;可能由此引发什么样的问题&#xff1f; <?php require_once("/home/rconfig/classes/usersession.class.php"); require_once("/home/rconfig/classes/ADLog.class.php"); require_onc…

金和OA C6 SAP_B1Config.aspx 未授权漏洞

产品介绍 金和网络是专业信息化服务商,为城市监管部门提供了互联网监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 漏洞描述 金和OA C6 SAP_B1Config.aspx接口 未授权&#xff0c;攻击者可通过此漏洞获取数据库账户密码等敏…

2024最新前端源码分享(附效果图及在线演示)

分享10款非常有趣的前端特效源码 其中包含css动画特效、js原生特效、svg特效以及小游戏等 下面我会给出特效样式图或演示效果图 但你也可以点击在线预览查看源码的最终展示效果及下载源码资源 粒子文字动画特效 基于canvas实现的粒子文字动画特效 会来回切换设定的文字特效 图…

postman使用方法指南,最全面的教程

Postman使用教程 一、Postman介绍 ​ Postman是一个英语单词&#xff0c;名词&#xff0c;作名词时意为“邮递员&#xff1b;邮差”。 ​ Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,…