面试问答之Spring进阶

文章目录

  • 🐒个人主页:信计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.hqwc.cn/news/517767.html

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

相关文章

【短时交通流量预测】基于小波神经网络WNN

课题名称&#xff1a;基于小波神经网络的短时交通流量预测 版本时间&#xff1a;2023-04-27 代码获取方式&#xff1a;QQ&#xff1a;491052175 或者 私聊博主获取 模型简介&#xff1a; 城市交通路网中交通路段上某时刻的交通流量与本路段前几个时段的交通流量有关&#x…

彻底搞清楚CUDA和cuDNN版本问题

彻底搞清楚CUDA和cuDNN版本问题 1. 缘起 我的机器上以下三条指令输出的版本不相同。 nvcc -V # 这个输出11.7 nvidia-smi # 右上角显示12.3 import torch; torch.version.cuda # 这个输出12.1我想以此为契机&#xff0c;彻底搞清楚CUDA、cuDNN和torch之间的关系。 环境&a…

this关键字

定义&#xff1a;this是Java的一个关键字&#xff0c;表示 某个对象。 应用方式&#xff1a;不可以出现在类方法中 &#xff0c;可出现在实例方法和构 造方法中。 在类的构造方法中 → 代表使用该构造方法所创建的对象 。 在实例方法中 → 代表正在调用该方法的 当前对象。 …

如何摆脱水印困扰?三款神器助您清爽无烦恼!

水印常常成为我们图片处理的一大难题&#xff0c;让我们苦恼不已。那么&#xff0c;如何能轻松摆脱这些烦人的水印呢&#xff1f;本文将向您推荐三款强大的去水印工具&#xff0c;让您清爽无烦恼&#xff0c;图片重焕光彩&#xff01; 1. 水印云 如何快速而准确地去除各类水印…

实时智能应答数字人搭建

语音驱动口型的算法 先看效果&#xff1a; 你很快就可以帮得上我了 FACEGOOD 决定将语音驱动口型的算法技术正式开源&#xff0c;这是 AI 虚拟数字人的核心算法&#xff0c;技术开源后将大程度降低 AI 数字人的开发门槛。FACEGOOD是一家国际领先的3D基础软件开发商&#xff0c;…

解决/sys/kernel/debug/下没有任何文件的

问题&#xff1a; /sys/kernel/debug目录下没有任何信息 解决&#xff1a; 首先检查Debug Filesystem是否选中&#xff0c;其位置是&#xff1a; Kernel hacking -> Compile-time checks and compiler options -> Debug Filesystem 打开configs文件查看是否为y: arch/arm…

SpringCloud微服务-RabbitMQ快速入门

文章目录 RabbitMQ快速入门1、什么是MQ&#xff1f;2、RabbitMQ概述3、RabbitMQ的结构和概念4、常见消息模型5、HelloWorld RabbitMQ快速入门 1、什么是MQ&#xff1f; MQ &#xff08;MessageQueue&#xff09;&#xff0c;中文是消息队列&#xff0c;字面来看就是存放消息的…

element多选框select下拉框数据回显的问题value.push is not a function

文章目录 问题描述 问题描述 今天在使用Element UI el-select组件遇到了一个问题&#xff0c;如下图&#xff1a; 下拉框里的值选中了&#xff0c;但是文本框里没有值 这是 el-select组件代码,我这里是用了一个多选框&#xff0c;options的值是在后端查询的&#xff0c;form.we…

太阳能模拟系统全光谱老化箱主要用于哪些行业

在科技日新月异的今天&#xff0c;产品的质量和耐用性成为了消费者关注的焦点。而太阳能模拟系统全光谱老化箱&#xff0c;作为一种模拟自然环境条件下材料老化的重要设备&#xff0c;正广泛应用于各个行业&#xff0c;为产品质量的保驾护航发挥着重要的作用。那么&#xff0c;…

『操作系统OS笔记』MAC(m1芯片)电脑安装FFmpeg

MAC(m1芯片)电脑安装FFmpeg mac电脑安装ffmpeg两种方法 文章目录 1. brew安装FFmpeg2. 官网下载FFmpeg压缩包3. 使用FFmpeg将音频和视频合并 1. brew安装FFmpeg brew install ffmpeg # 需要等比较久的时间&#xff0c;安装很多东西&#xff0c;安装过程中如果遇到报错对应解决…

2024 年 AI 辅助研发趋势:从研发数字化到 AI + 开发工具 2.0,不止于 Copilot

在上一年里&#xff0c;已经有不少的企业在工具链上落地了生成式 AI&#xff0c;结合我们对于这些企业的分析&#xff0c;以及最近在国内的一些 “新技术” 趋势&#xff0c;诸如于鸿蒙原生应用的初步兴起。从这些案例与趋势中&#xff0c;我们也看到了一些新的可能方向。 结合…

【JavaEE】_Spring MVC 项目单个及多个参数传参

目录 1. 传递单个参数 1.1 关于参数名的问题 2. 传递多个参数 2.1 关于参数顺序的问题 2.2 关于基本类型与包装类的问题 1. 传递单个参数 现创建Spring MVC项目&#xff0c;.java文件内容如下&#xff1a; package com.example.demo.controller;import org.springframewo…