当前位置: 首页 > news >正文

Spring八股文

Bean的生命周期

1.通过反射生成对象

2.填充Bean的属性

3.调用aware接口的invokeAwareMethod方法,对BeanName、BeanFactory、BeanClassLoader对象的属性设值

4.调用BeanPostProcessor的前置处理方法,其中使用较多的是ApplicationContextPostProcessor,设置ApplicationContext、Environment、ResourceLoader、EmbeddValueResolver等对象

5.调用initmethod方法,invokeInitmethod(),判断是否实现了initializingBean接口,如果有,则调用afterPropertiesSet方法,没有就不调用

6.调用BeanPostProcessor的后置处理方法,Spring的AOP就是在这里实现的

7.通过getBean获取完整的对象

8.进入销毁流程,判断是否实现了DispoableBean接口,然后调用destroyMethod方法

Spring是如何解决循环依赖问题的

三级缓存、提前暴露对象、aop

所有的Bean对象在创建的时候首先放进三级缓存中,在后续的使用过程中,如果需要被代理则返回代理对象,如果不需要被代理,则直接返回普通对象。

缓存的放置时间和删除时间

三级缓存:createBeanInstance之后

二级缓存:第一次从三级缓存中确定对象是代理对象还是普通对象,之后删除三级缓存

一级缓存:生成完整对象之后放到一级缓存,删除二三级缓存

Bean Factory和FactoryBean有什么区别

相同点:都是用来创建Bean对象的

不同点:如果使用BeanFactory创建对象,必须遵守spring的生命周期,此过程很复杂。如果只是想简单的创建一个Bean,同时交于Spring进行管理,可使用FactoryBean来创建

isSingleton:是否是单例对象

getObjectType:获取返回对象的类型

getObject:自定义创建对象的过程(new,反射,动态代理)

Spring中用到哪些设计模式?

1.工厂模式:BeanFactory就是工厂模式

2.单例模式:Bean默认都是单例的

3.模板方法:postProcessBeanFactory、onRefresh、initPropertyValue

4.原型模式:指定作用域为prototype

5.策略模式:XmlBeanDefinitionReader、PropertiesBeanDefinitionReader

6.观察者模式:listener、event、multicast

7.适配器模式:Adapter

8.装饰者模式:BeanWrapper

9.责任链模式:使用aop的时候,会先生成一个拦截器链

10.代理模式:动态代理

11.委托者模式:delegate

SpringAOP的底层实现原理

动态代理

先有IOC,后有AOP,AOP是对Bean的扩展实现,所以在BeanPostProcessor后置处理方法中来实现的。

1.代理对象的创建过程(advice、切面、切点)

2.通过jdk或者cglib的方式来生成代理对象

3.在执行方法调用的时候,会调用到生成的字节码文件中,直接会找到DynamicAdvisoredlnterceptor类中的intercept方法,从此方法开始执行

4.根据之前定义好的通知来生成拦截器链

5.从拦截器链中依次获取每一个通知开始进行执行

Spring的事务是如何回滚的

spring的事务是由aop来实现的,首先要生成具体的代理对象,然后按照aop的执行流程来执行具体的操作逻辑,正常情况下要通过通知来完成核心功能,但事务不是通过通知来实现的,而是通过TransactionInterceptor来实现的,调用invoke来实现具体的逻辑。

1.先做准备工作,解析各个方法上事务相关属性,根据具体的属性判断是否开启新事务

2.当需要开启的时候,获取数据库链接,关闭自动提交功能,开启事务

3.执行具体的sql逻辑操作

4.在操作过程中,如果执行失败了,会通过completeTransactionAfterThrowing来完成事务的回滚操作,回滚的具体逻辑是通过doRollBack方法来实现的,实现的时候也是要先获取链接对象,通过链接对象来回滚

5.如果执行过程中,没有任何意外情况的发生,那么通过commitTransactionAfterReturning来完成事务的提交操作,提交的具体逻辑是通过doCommit方法来实现的,实现的时候也是要获取链接,通过链接对象来提交

6.当事务执行完毕之后需要清除相关的事务信息,cleanupTransactionInfo

spring事务传播特性

spring的事务传播特性有7种

1.Required

2.Requires_new

3.nested

4.Support

5.Not_Support

6.Never

7.Mandatory

某一个事务嵌套另一个事务的时候怎么办?(A方法调用B方法,AB方法都有事务,但是传播性不同,那么A如果有异常,B怎么办?B如果有异常,A怎么办?)

事务的传播特性指的是不同方法的嵌套调用过程中,事务应该如何进行处理,是用同一个事务还是不同的事务,当出现异常的时候是回滚还是提交,两个方法之间相关影响,在日常工作中,使用较多的是required、Requires_new、nested

事务可以分为三类:支持当前事务、不支持当前事务、嵌套事务

核心处理逻辑:

1.判断内外方法是否为同一个事务

是:异常统一在外层方法处理

不是:内层方法有可能影响到外层方法,但是外层方法是不会影响到内层方法的

SpringIOC的底层实现

反射、工厂、设计模式

1.先通过createBeanFactory创建Bean工厂

2.循环创建Bean对象,因为容器都是单例的,所以优先通过getBean、doGetBan从容器中查找,找不到的话

3.通过createBean、doCreateBean方法,通过反射的方式创建对象,一般情况下使用的是无参的构造方法

4.进行对象额属性填充populateBean

5.进行其他初始化操作(initializingBean)

ApplicationContext和BeanFactory有什么区别?

1.BeanFactory创建bean采用延迟加载形式,也就是说你需要getBean()才会加载

2.ApplicationContext创建Bean默认采用立即加载,ApplicationContext继承了BeanFactory

如何控制Bean的加载顺序?

使用@DependsOn即可控制Bean的加载顺序

  • 配置在方法上,将优先于@Bean配置的bean进行加载
  • 配置在类上,将优先于当前类中所有@Bean配置的Bean进行加载
  • 配置在类上,将优先于@Compent等配置的Bean进行加载
  • 相关属性:value(默认),设置当前bean所依赖的bean的id

相关文章:

Spring八股文

Bean的生命周期 1.通过反射生成对象 2.填充Bean的属性 3.调用aware接口的invokeAwareMethod方法,对BeanName、BeanFactory、BeanClassLoader对象的属性设值 4.调用BeanPostProcessor的前置处理方法,其中使用较多的是ApplicationContextPostProcessor…...

20 k8sMetric 简介

一. Metric 简介metrics-server 可实现 Kubernetes 的 Resource Metrics API(metrics.k8s.io),通过此 API 可以查询 Pod 与 Node 的部分监控指标,Pod 的监控指标用于 HPA、VPA 与 kubectl top pods -n ns 命令,而 Node…...

面试问了解Linux内存管理吗?10张图给你安排的明明白白

linux内存管理,内存管理好像离我们很远,但这个知识点虽然冷门(估计很多人学完根本就没机会用上)但绝对是基础中的基础,这就像武侠中的内功修炼,学完之后看不到立竿见影的效果,但对你日后的开发工…...

【C++】内联函数inline

文章目录概念使用特性原理概念 C中内联函数的出现解决了C语言宏函数的不足,类似于宏展开,这种在函数调用处直接嵌入函数体的函数称为内联函数,又称内嵌函数或内置函数。 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内…...

C++演讲比赛流程管理系统_黑马

任务 学校演讲比赛,12人,两轮,第一轮淘汰赛,第二轮决赛 选手编号 [ 10001 - 10012 ] 分组比赛 每组6人 10个评委 去除最高分 最低分,求平均分 为该轮成绩 每组淘汰后三名,前三名晋级决赛 决赛 前三名胜出 …...

谈谈低代码的安全问题,一文全给你解决喽

低代码是一种软件开发方法,通过使用图形化用户界面和可视化建模工具,以及自动生成代码的技术,使得开发人员可以更快速地构建和发布应用程序。 作为近些年软件开发市场热门之一,市面上也涌现了许多低代码产品,诸如简道云…...

[数据结构]二叉树OJ(leetcode)

目录 二叉树OJ(leetcode)训练习题:: 1.单值二叉树 2.检查两棵树是否相同 3.二叉树的前序遍历 4.另一棵树的子树 5.二叉树的构建及遍历 6.二叉树的销毁 7.判断二叉树是否是完全二叉树 二叉树OJ(leetcode)训练习题:: 1.单值二叉…...

flutter 输入时插入分隔符

每四位插入一个分隔符import package:flutter/services.dart;class DividerInputFormatter extends TextInputFormatter {final int rear; //第一个分割位数,后面分割位,,数final String pattern; //分割符DividerInputFormatter({this.rear 4, this.pattern });overrideTex…...

静态版通讯录——“C”

各位CSDN的uu你们好呀,之前小雅兰学过了一些结构体、枚举、联合的知识,现在,小雅兰把这些知识实践一下,那么,就让我们进入通讯录的世界吧 实现一个通讯录: 可以存放100个人的信息每个人的信息:名…...

前端基础开发环境搭建工具等

一、基本开发环境(软件)安装1、Vscode(代码编辑器)官网下载网址:https://code.visualstudio.com/2、nvm(node多版本管理器,每个node版本都有对应的npm版本)安装包下载地址&#xff1…...

华为OD机试题【IPv4 地址转换成整数】用 Java 解 | 含解题说明

华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典本篇题目:IPv4 地址转换成整数 题目 存在…...

[数据结构]排序算法

目录 常用排序算法的实现:: 1.排序的概念及其运用 2.插入排序 3.希尔排序 4.选择排序 5.冒泡排序 6.堆排序 7.快速排序 8.归并排序 9.排序算法复杂度及稳定性分析 10.排序选择题练习 常用排序算法的实现:: 1.排序的概念及其运用…...

不愧是2023年就业最难的一年,还好有车企顶着~

就业龙卷风已经来临,以前都说找不到好的工作就去送外卖,但如今外卖骑手行业都已经接近饱和状态了,而且骑手们的学历也不低,本科学历都快达到了30%了,今年可以说是最难找到工作的一年。 像Android 开发行业原本就属于在…...

C/C++之while(do-while)详细讲解

目录 while循环有两个重要组成部分: while 是一个预测试循环 无限循环 do-while 循环 while循环有两个重要组成部分: 进行 true 值或 false 值判断的表达式;只要表达式为 true 就重复执行的语句或块;图 1 显示了 while 循环的…...

SpringCloud学习笔记(一)认识微服务

一、微服务技术栈 二、单体架构和分布式架构的区别 1、单体架构: 将业务的所有功能集中在一个项目中开发,打成一个包进行部署 优点:架构简单,部署成本低缺点:耦合度高 2、分布式架构: 根据业务功能对系统…...

Unity中使用WebSocket (ws://)的方法

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。 WebSocket与http 其…...

米哈游春招算法岗-2023.03.19-第一题-交换字符-简单题

交换字符Problem Description 米小游拿到了一个仅由小写字母组成的字符串,她准备进行恰好一次操作:交换两个相邻字母,在操作结束后使得字符串的字典序尽可能大。 请你输出最终生成的字符串。 input 一个仅由小写字母组成的字符串,…...

能把爬虫讲的这么透彻的,没有20年功夫还真不行【0基础也能看懂】

前言 可以说很多人学编程,不玩点爬虫确实少了很多意思,不管是业余、接私活还是职业爬虫,爬虫世界确实挺精彩的。 今天来给大家浅谈一下爬虫,目的是让准备学爬虫或者刚开始起步的小伙伴们,对爬虫有一个更深更全的认知…...

springcloud学习总结

springcloud 构建微服务项目步骤 导入依赖编写配置文件开启这个功能 Enablexxx配置类 于2023年2月24日下午17点38分开始学习于2023年3月17日晚上20点26分学完总结代码地址:https://gitee.com/liang-weihao/StudySpringcloud学习笔记地址:https://www.…...

2022年亏损超10亿,告别野蛮成长的众安在线急需新“引擎”

2023年3月21日,众安在线披露了2022年财报,营收233.52亿元,同比增长6.44%;净亏损16.33亿元,去年同期净利润为11.6亿元,同比由盈转亏。 尽管众安在线再次身陷亏损的泥潭,但投资者却没有选择逃离。…...

centos 7 部署awstats 网站访问检测

一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时,可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案: 1. 检查电源供电问题 问题原因:多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

Spring Boot面试题精选汇总

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)

升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求&#xff…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)

目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

2023赣州旅游投资集团

单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…...

【LeetCode】算法详解#6 ---除自身以外数组的乘积

1.题目介绍 给定一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O…...