面试问答之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.mzph.cn/news/725989.shtml

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

相关文章

CIA402协议笔记

文章目录 1、对象字典1.1 Mode of Operation&#xff08; 606 0 h 6060_h 6060h​)1.2 Modes of opration display( 606 1 h ) 6061_h) 6061h​) 2、状态机2.1 控制字&#xff08;ControlWord、6040h&#xff09;2.2 状态字&#xff08;StatusWord、6041h&#xff09;2.3 shutd…

视频扩散模型介绍 Video Diffusion Models Introduction

视频扩散模型介绍 Video Diffusion Models Introduction Diffusion 扩散模型中的一些概念DDPMDDIMCLIPLatent DiffusionStable DiifusionLoRADreamBoothControlNet 视频生成评估标准图片层面视频层面 前人的工作Make-A-VideoAlign your Latents 开源视频生成模型ModelScopeT2V&…

蓝桥杯-Set

目录 HashSet类常用方法 1 add(Object obj)方法 2 size() 方法 3 remove(Object obj)方法 4 contains()方法 5 clear() 方法 例题实战 set 一个不允许出现重复的元素&#xff0c;并且无序的集合&#xff0c;主要有HashSet实现类。 在判断重复元素的时候&#xff0c;Set集…

本地知识库搭建成功后,企业效率真的翻倍了

在如今这个快节奏的信息时代&#xff0c;对企业来说&#xff0c;拥有一套高效的知识管理系统早已不再是选项&#xff0c;而是必要。而本地知识库&#xff0c;它这个集信息存储、管理和查询于一体的平台&#xff0c;不仅改变了公司信息资源共享的方式&#xff0c;还帮助进一步提…

OpenCV学习笔记(二)——OpenCV简介

目录 图像基础和简介 OpenCV简介 OpenCV的发展历史 OpenCV的应用 OpenCV的核心模块 图像基础和简介 人们通过肉眼所看见的世界是通过图像来呈现的&#xff0c;那么什么是图像呢&#xff1f;在计算机里面&#xff0c;最基本的组成单元就是像素&#xff0c;图像是很多像素的…

基于单片机的医院输液系统设计

目 录 摘 要 Ⅰ Abstract Ⅱ 引 言 1 1系统方案设计与论证 3 1.1系统硬件结构总体设计方案 3 1.2点滴速度测量电路方案的选择与论证 3 1.3液面检测电路方案的选择与论证 4 1.4通过电机控制滴速电路的方案与论证 4 1.5显示器接口电路方案选择与论证 5 1.6键盘接口电路方案选择与…

(黑马出品_03)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式

&#xff08;黑马出品_03&#xff09;SpringCloudRabbitMQDockerRedis搜索分布式 微服务技术Docker 今日目标1.初识Docker1.1.什么是Docker1.1.1.应用部署的环境问题1.1.2.Docker解决依赖兼容问题1.1.3.Docker解决操作系统环境差异1.1.4.小结 1.2…

【REST2SQL】11 基于jwt-go生成token与验证

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 【REST2SQL】07 GO 操作 Mysql 数据库 【RE…

紧握时代契机链接亿万家庭 创维汽车2024全球经销商大会圆满召开

3月6日&#xff0c;以“极致 见新境”创维汽车2024全球经销商大会在徐州隆重举行。徐州经开区管委会副主任季洪志&#xff0c;缅甸驻华大使馆商务参赞 Win Myat Aung&#xff0c;法国中小企业联盟主席 Xavier Michon-Lehnebach&#xff0c;创维集团、创维汽车创始人黄宏生&…

php常见的45个漏洞及解决方案

[TOC]&#xff08;太多了&#xff0c;目录只列出最重要的几个&#xff0c;剩下的同学们自己翻&#xff09; PHP作为一种广泛应用的服务器端脚本语言&#xff0c;在历史上曾曝出过多种安全漏洞。以下是一些PHP漏洞的类别及其简要解释&#xff0c;以及如何解决这些问题&#xff1…

Java精品项目--第5期基于SpringBoot的高速收费系统的设计分析与实现

项目使用技术栈 SpringBootMavenShiroMySQLMybatis-PlusJavaJDK1.8HTML 系统介绍 项目截图

dolphinscheduler试用(一)(边用边修bug。。。。create tenant error)

&#xff08;作者&#xff1a;陈玓玏&#xff09; 前提&#xff1a;部署好了dolphinscheduler&#xff0c;部署篇见https://blog.csdn.net/weixin_39750084/article/details/136306890?spm1001.2014.3001.5501 官方文档见&#xff1a;https://dolphinscheduler.apache.org/…

JavaEE进阶(13)案例综合练习——博客系统

接上次博客&#xff1a;JavaEE进阶&#xff08;12&#xff09;Spring事务和事务传播机制&#xff1a;事务回顾、Spring中事务的实现、Transactional详解&#xff08;用法、rollbackFor、事务隔离级别、事务传播机制&#xff09;-CSDN博客 目录 项目介绍 准备工作 数据准备 …

如何给Vue项目配置好一个nginx.conf文件?

如何给Vue项目配置好一个nginx.conf文件&#xff1f; 一般前端项目中&#xff0c;会有一个docker/nginx/nginx.conf文件&#xff0c;用于配置DockerFile配置等。 那么&#xff0c;如何给项目写好一个nginx.conf文件&#xff0c;以DockerFile为例&#xff1a; # 使用 Node.js …

《辐射4》是一款什么样的游戏 怎样在mac电脑上玩到《辐射4》辐射4攻略 辐射4开局加点 怎么在Mac电脑玩Steam游戏

辐射4&#xff08;Fallout 4&#xff09;是由Bethesda开发的一款动作角色扮演类游戏&#xff0c;为《辐射》系列游戏作品的第四代&#xff0c;于2015年11月10日发行。游戏叙述了主角一家在核爆当天&#xff08;2077年10月23日&#xff09;&#xff0c;被Vault-Tec&#xff08;避…

Spring Cloud Gateway核心之Predicate

路由 Predicate 工厂 Spring Cloud Gateway 将路由作为 Spring WebFluxHandlerMapping基础设施的一部分进行匹配。Spring Cloud Gateway 包含许多内置的路由Predicate 工厂。所有这些谓词都匹配 HTTP 请求的不同属性。多个 Route Predicate Factory 可以组合&#xff0c;并通过…

Android Studio中debug功能详解

本文为大家分享了Android Studio debug功能的具体使用方法&#xff0c;供大家参考&#xff0c;具体内容如下 运行debug模式 \1. 进入debug – 点击图中红色圆圈圈起的左边绿色按钮&#xff0c;运行app的debug模式&#xff0c;快捷键ShiftF9 – 点击图中红色圆圈圈起的右边按…

[数据结构初阶】栈

各位读者老爷好&#xff0c;鼠鼠我好久没写博客了&#xff08;太摆烂了&#xff09;&#xff0c;今天就基于C语言浅介绍一下数据结构里面的栈&#xff0c;希望对你有所帮助吧。 目录 1.栈的概念及结构 2.栈的实现 2.1定义栈 2.2.初始化栈 2.3.入栈 2.4.出栈 2.5.获取栈…

zabbix监控中间件服务

zabbix监控Nginx 自定义nginx访问量的监控项&#xff0c;首先要通过脚本将各种状态的值取出来&#xff0c;然后通过zabbix监控。找到自定义脚本上传到指定目录/etc/zabbix/script/ 在zbx-client客户端主机操作 #创建目录&#xff0c;然后将脚本上传到该目录mkdir /etc/zabbix/…

【JS】关于this的使用

this 前言一、this是什么&#xff1f;二、做什么&#xff1f;1.全局环境2.函数环境3.new实例对象4.apply、bind、call绑定4.1 apply()4.2 call()4.3 bind() 三、为什么用this&#xff1f;四、如何改变this&#xff1f;五、应用场景&#xff1f;总结 前言 痛点 经常写Vue项目&a…