面试问答之Spring进阶

news/2024/4/21 13:42:29/文章来源:https://blog.csdn.net/qq_66443592/article/details/136456682

文章目录

  • 🐒个人主页:信计2102罗铠威
  • 🏅JavaEE系列专栏
    • 📖前言:
    • 🎀说说你对Spring的认识与理解
    • 🐕Bean的分类
    • 🐕 BeanFactory 接口和ApplicationContex 接口 的区别
    • 🐕SpringBean的声明周期
      • 🪀销毁Bean对象的方式
      • 🪀初始化Bean对象
    • 🐕Spring中的Bean是线程安全的吗?
    • 🐕 Bean循环依赖问题
    • 🐕Spring注解
      • 🪂声明Bean的注解
      • 🪂Bean的生命周期注解
      • 🪂依赖注入Bean的注解
      • 🪂切面通知相关注解(AOP)
      • 🪂SpringWeb中常用注解
    • 🐕SpringBoot注解
      • 🦓SpringBoot自动装配的实现原理

🐒个人主页:信计2102罗铠威

🏅JavaEE系列专栏

📖前言:

本篇博客主要以总结面试过程中对spring常问的考察点
在这里插入图片描述

🎀说说你对Spring的认识与理解

Spring是一款轻量级的、非侵入式的,具有IOC、AOP功能的一站式集成框架。目的是简化企业开发

轻量级源于它的核心jar包只有3MB大小,非侵入式是指开发者不需要写多余的类来实现它)
IOC功能: (控制反转)就是将创建对象的权利交给Spring框架,有Spring框架帮助我们管理对象。

依赖注入: 对象不用我们创建,在Spring启动时通过注解会自动注入一个代理对象,帮助我们调用方法。(它可以通过xml文件<bean标签来配置属性、构造方法、原型还是单例 或者通过注解的方式注入)

AOP功能:(面向切面编程)它是一种策略,与OOP(面向对象)作区分,OOP它是一种思想,是对宏观的把控。而AOP更像一种战术策略,它是将业务代码与非业务代码隔离开,通过创建代理对象的方式,让代理对象帮助实现业务功能和一些其他功能。场景:统一异常管理、事务、日志

一站式: 是指Spring的功能模块很多,例如SpringWeb、数据持久层、逻辑处理层都有,并且还可以集成很多的插件以及框架 例如:mybatis框架、lombok插件。

🐕Bean的分类

singleton :(单例bean)(默认的) 一个类只创建一个bean对象。
prototype : (原型bean) 每获取一次,就创建一次bean对象,
request : (请求bean) 每发一个HTTP请求就创建一个bean对象
session : (会话bean)一个会话(浏览器建立连接->关闭)创建一个bean对象

🐕 BeanFactory 接口和ApplicationContex 接口 的区别

BeanFactory 类 是一个抽象接口,他是创建bean对象相关的最顶级的接口,它里面定义了创建对象的抽象方法。ApplicationContex接口间接继承了它。(打个比方把spring看作巨人, BeanFactory可以看成巨人的心脏 ,而ApplicationContex可以看成巨人的身体)最终ClassPathXmlApplicationContex实现类间接实现了ApplicationContex
在这里插入图片描述

🐕SpringBean的声明周期

大致分为5个阶段:

  1. 实例化(原本对象)
  2. 属性赋值
  3. 初始化(Bean对象)
  4. 将Bean对象放入容器,使用(依赖注入)
  5. 销毁Bean对象

其中第三步“初始化” 与 第五步 “销毁” 有考察点

🪀销毁Bean对象的方式

第一种:实现 DisposableBean 接口,重写它的destroy方法
第二种: 使用xml配置 ,在<bean> 标签中右destroy-method属性可以指定毁灭Bean对象的方法。

在这里插入图片描述

🪀初始化Bean对象

会检测我们的类是否实现了某些接口,如过实现了,就会执行相应的方法。
AOP额外功能的增强也是在初始化过程中进行的。
在这里插入图片描述
在这里插入图片描述

🐕Spring中的Bean是线程安全的吗?

如果是单例bean,需要使用TreadLocal生成本地变量副本,来保证线程安全。
如果是原型bean,每次都会获取一个Bean对象,是线程安全的。

Bean 又分为有状态无状态
有状态的: 可以存储数据,例如 int num=0; 这种不是线程安全的,需要我们进行控制。
无状态的: 只在方法里面调用其他方法, 例如 LoginDao logindao; 进入方法后 loginDao.find(); 那么它是线程安全的,因为他没有涉及Bean对象的数据改变

🐕 Bean循环依赖问题

A中依赖了B,B中依赖了A (“用关联更确切”),如果不考虑Spring中的循环依赖,那么它就不是一个问题。是常见现象。但在Spring中BeanA初始化需要(依赖注入)@Autowired BeanB,而BeanB初始化需要(依赖注入)@Autowired BeanA,此时A还没有成为Bean对象,无法依赖注入,很容易会造成死锁。在Spring中是这样解决的,
在这里插入图片描述
在这里插入图片描述
过程:

1.创建半成品A , 需要B,
2.从一级缓存中没找到Bean B ,将半成品A放入二级缓存,用于初始化A的工厂放入三级缓存
3. 创建半成品B ,需要A,
从一级缓存没找到Bean A,,移除三级缓存中的A工厂,将二级缓存中半成品A注入到B中,初始化完成Bean B对象放入一级缓存
4.A从一级缓存中拿到Bean B 完成初始化Bean A并且Bean A也放入一级缓存。

在这里插入图片描述

在这里插入图片描述

🐕Spring注解

🪂声明Bean的注解

@RestController 常用在控制器层上
@Service 用在逻辑处理层(业务层)
@Repository 用在数据持久层
@Component 用在model模块中
并且@RestController @Service @Repository 都可以成为@Component ,只是为了区分不同模块的功能而使用的特定的注解。

🪂Bean的生命周期注解

(支持xml配置<bean>标签中的scope属性,效果相同)
@Scope设置类型包括
singleton 、protetype 、requst 、session、 globalSession

🪂依赖注入Bean的注解

@Autowired :由Spring提供
@Qualifier :当有多个统一类型的Bean时,可以使用@Qualifier(value=“adminDao”)来指定,与@Autowired配合使用
@Resource (name=“adminDao”) :java JDK提供,(默认是@Autowired功能,有参数的话是@Qualifier,如果找不到,还是@Autowired功能)

🪂切面通知相关注解(AOP)

(连接点:目标类中可以被增强的方法)
(切入点:类中实际被增强的方法)
(切面:把通知添加到切入点的过程)
@Aspect 定义一个切面,
@Before 在方法执行之前执行
@AfterReturning 在方法结束后执行(如果有异常,就不执行)
@After 在方法结束/异常后最终执行,无论是否有异常(类似于finally)
@ AfterThrowing 异常通知
@ Around 环绕通知,可以在方法执行前,执行后执行,算一个万能的

🪂SpringWeb中常用注解

@RestController 相当于一个组合注解:【 @Controller +@ResponseBody组合 】注解在类上,相当于所有的方法都加上了@ResponseBody
@RequestMapping :用于映射的Web请求,包括路径和参数
在这里插入图片描述
@RequestBody 支持异步响应请求,将数据存放于Response内,返回json格式响应给前端
@RequestBody :允许Request参数在Request体/载荷中,而不是直接连接在地址后面(get请求),具体表现为:自动与属性名相同的属性映射
@RequestHeader :请求头中的数据,因为请求头中可以携带token
@Param (“id”) :指定参数,需要和请求中的参数保持一致,常用语get请求。

其他类型的注解
@JsonFormat 日期格式化,标注在属性上面,使用正则表达式 +时区 可以进行 日期格式化
@Transactional 事务,注解可以在类和方法上,(如果注解在类上,那么类中的方法都会在事务中运行,尽量在service层使用)

🐕SpringBoot注解

@SpringBootApplication是一个组合标签,定义在项目的启动类上
他里面包括三个重要的标签:@Configurantion @EnableAutoConfiguration @ComponentScan
异常相关的注解:
@RestControllerAdvice ,@ExceptionHandler 用于同一异常捕获
配置类相关的注解:
@Configurantion 声明配置类
@Bean 代替xml配置方式,生成一个bean对象
@CommponentScan 用于对Commponent类型进行扫描

在这里插入图片描述

🦓SpringBoot自动装配的实现原理

springboot项目启动时,首先会对appcation.yml文件和pom.xml文件进行扫描,获取到项目中使用的第三方组件,然后会读取Spring.factories中的Spring支持的所有配置类,最后再筛选加载项目中使用到的组件配置类。
@SpringBootApplication下的
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

时间序列-AR MA ARIMA

一、AR模型(自回归) AR探索趋势和周期性 预测依赖于过去的观测值和模型中的参数。模型的阶数 p pp 决定了需要考虑多少个过去时间点的观测值。 求AR模型的阶数 p和参数 ϕ i \phi_i ϕi​ &#xff0c;常常会使用统计方法如最小二乘法、信息准则&#xff08;如AIC、BIC&#xf…

暗黑大气MT苹果CMS MT主题源码-PC版适用于苹果CMS V10

苹果CMS MT主题是一款多功能的主题&#xff0c;适用于苹果CMS V10的暗黑大气风格。 地 址 &#xff1a; runruncode.com/houtai/19704.html 初次使用说明&#xff1a; 在后台设置中&#xff0c;选择MT主题&#xff0c;并在模板目录中填写HTML。 后台地址为&#xff1a;MT主题…

day14_用户前台项目环境搭建(首页接口开发,分类接口开发,网关服务搭建,Redis缓存,Spring Cache)

文章目录 1 尚品甄选H5介绍1.1 业务功能介绍1.2 系统架构1.3 前端H5开发说明 2 搭建项目环境2.1 项目结构说明2.2 模块依赖说明2.3 环境说明2.4 项目模块创建2.4.1 spzx-parent2.4.2 spzx-service2.4.43 service-product 2.5 导入接口文档 3 首页接口开发3.1 需求分析3.3 接口开…

java上传本地文件到服务器共享

在Windows系统中,将本地文件夹中的某个文件上传到另一台Windows服务器电脑上,前提:两台电脑网络互通,要接收文件的Windows服务器文件夹开启了共享,可以被本机用如下方式进行写入和读取: 如何配置服务器共享请自行百度查找。 所需要的maven依赖如下: <dependency>…

解决vue项目本地开发完成后部署到服务器后报404的问题

一、如何部署 前后端分离开发模式下&#xff0c;前后端是独立布署的&#xff0c;前端只需要将最后的构建物上传至目标服务器的web容器指定的静态目录下即可 我们知道vue项目在构建后&#xff0c;是生成一系列的静态文件 常规布署我们只需要将这个目录上传至目标服务器即可 /…

C#中常见的异步使用错误场景

一、错误代码 下面是一个很简单的代码&#xff0c;初步看可能会觉得输出结果是0-5&#xff0c;但其实不是 static void Main(string[] args){for (int i 0; i < 5; i){Task.Run(() > {Print(i);});}}static void Print(int i){Console.WriteLine(i);} 二、修改方法 在异…

Electron通过预加载脚本从渲染器访问Node.js

问题&#xff1a;如何实现输出Electron的版本号和它的依赖项到你的web页面上&#xff1f; 答案&#xff1a;在主进程通过Node的全局 process 对象访问这个信息是微不足道的。 然而&#xff0c;你不能直接在主进程中编辑DOM&#xff0c;因为它无法访问渲染器 文档 上下文。 它们…

搭建的svn 1.14.1,拉取代码时候没输入账户密码就报错 auth failed

这边在ubuntu里面搭的svn server&#xff0c;但是拉代码的是否一直报错 auth faield&#xff0c;一开始以为是有auth cache&#xff0c;去设置里面清楚了&#xff0c;windows 里面也清楚了&#xff0c;但是还是报错 问题原因 一直排查才发现&#xff0c;我新增用户的时候&…

STM32控制气泵和电磁阀实现

一、功能简介 使用STM32控制气泵和电磁阀的开和关&#xff0c;气泵和电磁阀的供电电压为12V。 二、实现过程 1、气泵和电磁阀的开和关均为开关量&#xff0c;实现控制方法有多种&#xff0c;比如继电器&#xff0c;但是继电器动作有噪声且体积较大&#xff0c;更好的方法为使…

【刷题】双指针入门

双指针入门 双指针283.移动零1089. 复写零202. 快乐数11. 盛最多水的容器Thanks♪(&#xff65;ω&#xff65;)&#xff89;谢谢阅读&#xff01;&#xff01;&#xff01;下一篇文章见&#xff01;&#xff01;&#xff01; 双指针 双指针是非常经典的算法&#xff0c;包括但…

C++之获取Windows系统信息

目录 1. 操作系统版本 2. 获取CPU信息 3. 获取内存信息 4. 获取硬盘信息 5.获取网络接口信息 6.获取计算机名称、用户名 在C中&#xff0c;你可以使用Windows API函数来获取Windows系统的各种信息。以下是一些常见的API函数和示例代码&#xff0c;用于获取Windows系统信息…

vant van-field 密码输入框小程序里隐藏、显示密码bug总结

老规矩先上效果图: vant 输入框组件 密码的隐藏与显示功能&#xff1a; 注: 用password属性控制密码的显示与隐藏 不要用type属性&#xff0c;type属性在真机上有时会没有效果 1、当然如果只用typepassword 不需要切换显示、隐藏也可以使用。 2、如果用到了密码的显示与…

MES系统是怎么进行数据采集的?

在MES管理系统中&#xff0c;数据采集作为最基础也最为关键的一环&#xff0c;对于实现生产过程的透明化、可控好以及优化生产流程具有重要意义。 mes系统是怎么采集数据的? 一、PLC类数据采集&#xff1a;使用C#或C直接编程访问PLC(不需要花钱买组态软件或第三方软件) 二、…

Java精品项目--第6期基于SpringBoot的茶叶商城的设计分析与实现

项目技术栈 SpringBootMavenMySQLJAVAMybatis-PLusVue.js&#xff08;非前后端分离&#xff09;Element-UI&#xff08;非前后端分离&#xff09;… 表截图 项目截图

VGW在 Windows 平台上局域网就绪的旁路由器程序

在查阅本篇文章之前可以查看下&#xff0c;本人前两年写的关于VGW软件路由器的文章 Linux 平台上面单网卡 TUN/TAP实现局域网其它设备上网_linux 物理网卡与tun同网段-CSDN博客 VGW软件路由器是一个工作IEEE以太网&#xff08;L2&#xff09;链路层的路由器程序&#xff0c;它…

哪个牌子宠物空气净化器好?质量好的宠物空气净化器推荐

即使我们很爱自家的宠物&#xff0c;但我们也无法否认处理房间里飘荡的宠物毛发和皮屑&#xff0c;以及那些令人不快的气味&#xff08;比如地毯上的意外和垃圾桶里的气味&#xff09;的挑战。对于过敏患者来说&#xff0c;这几乎是无法忍受的。寻找有效的方法来减少这些问题对…

利用axios库在Node.js中进行代理请求的实践

前言 随着互联网的蓬勃发展&#xff0c;Web应用程序越来越依赖于从外部服务器获取数据。在这个过程中&#xff0c;我们经常需要通过代理服务器来访问外部资源。本文将介绍如何充分利用axios库&#xff0c;在Node.js中进行代理请求的最佳实践&#xff0c;并通过一个实际案例来展…

【NVCC,CUDA,NVIDIA驱动】装了pytorch,nvcc -V不能用,但能正常使用gpu

这里写目录标题 问题描述问题原理为什么anaconda安装的Pytorch&#xff0c;其能够直接在gpu上运行NVCC是什么&#xff0c;怎么查看装没装 如果没有NVCC文件夹&#xff0c;应该如何安装NVCC&#xff1f;CUDNN&#xff1a;Local Installer for Linux x86_64和Local Installer for…

单例模式及应用场景

如果希望自己的代码更优雅、可维护性更高以及更简洁&#xff0c;往往离不开设计模式这一解决方案。 在JS设计模式中&#xff0c;最核心的思想&#xff1a;封装变化&#xff08;将变与不变分离&#xff0c;确保变化的部分灵活&#xff0c;不变的部分稳定&#xff09;。 那么来…

ssm基于javaEE+springboot校园闲置二手物品拍卖交易平台_ngad7

为提升浏览用户观感及使用体验&#xff0c;本系统要具有易用性和美观性。通过页面的简单提示就可完成操作&#xff0c;校园闲置物品交易平台展示界面应该清楚简洁&#xff0c;使用户通过美观的前台页面能快速定位想要浏览的校园闲置物品交易平台信息。后台界面也应简约&#xf…