当前位置: 首页 > 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亿元,同比由盈转亏。 尽管众安在线再次身陷亏损的泥潭,但投资者却没有选择逃离。…...

ChatGPT文心一言逻辑大比拼(一)

❤️觉得内容不错的话,欢迎点赞收藏加关注😊😊😊,后续会继续输入更多优质内容❤️👉有问题欢迎大家加关注私戳或者评论(包括但不限于NLP算法相关,linux学习相关,读研读博…...

【机器学习面试总结】————特征工程

【机器学习面试总结】————特征工程一、特征归一化为什么需要对数值类型的特征做归一化?二、类别型特征在对数据进行预处理时,应该怎样处理类别型特征?三、高维组合特征的处理什么是组合特征?如何处理高维组合特征?四、组合特征怎样有效地找到组合特征?五、文本表示模型…...

如何将字符串反转?

参考答案 使用 StringBuilder 或 StringBuffer 的 reverse 方法,本质都调用了它们的父类 AbstractStringBuilder 的 reverse 方法实现。(JDK1.8)不考虑字符串中的字符是否是 Unicode 编码,自己实现。递归1. public AbstractStrin…...

Linux内核IO基础知识与概念

什么是 IO在计算机操作系统中,所谓的I/O就是 输入(Input)和输出(Output),也可以理解为读(Read)和写(Write),针对不同的对象,I/O模式可以划分为磁盘…...

paper文献和科研小工具

一、好用的网站 Aminer 二、好用的工具 ​1. SciSpace SciSpace官网 【ChatGPT 论文阅读神器】SciSpace 用户注册与实战测试 SciSpace是一款基于 ChatGPT 的论文阅读神器。 2. ReadPaper 强大且超实用的论文阅读工具——ReadPaper ReadPaper官网 ReadPaper下载链接 Rea…...

dfs和bfs能解决的问题

一.理解暴力穷举之dfs和bfs暴力穷举暴力穷举是在解决问题中最常用的手段,而dfs和bfs算法则是这个手段的两个非常重要的工具。其实,最简单的穷举法是直接遍历,如数列求和,遍历一个数组即可求得所问答案,这与我在前两篇博…...

静态通讯录,适合初学者的手把手一条龙讲解

数据结构的顺序表和链表是一个比较困难的点,初见会让我们觉得有点困难,正巧C语言中有一个类似于顺序表和链表的小程序——通讯录。我们今天就来讲一讲通讯录的实现,也有利于之后顺序表和链表的学习。 目录 0.通讯录的初始化 1.菜单的创建…...

【你不知道的 CSS】你写的 CSS 太过冗余,以至于我对它下手了

:is() 你是否曾经写过下方这样冗余的CSS选择器: .active a, .active button, .active label {color: steelblue; }其实上面这段代码可以这样写: .active :is(a, button, label) {color: steelblue; }看~是不是简洁了很多! 是的,你可以使用…...

Lesson 8.1 决策树的核心思想与建模流程

文章目录一、借助逻辑回归构建决策树1. 决策树实例2. 决策树知识补充2.1 决策树简单构建2.2 决策树的分类过程2.3 决策树模型本质2.4 决策树的树生长过程2.5 树模型的基本结构二、决策树的分类与流派1. ID3(Iterative Dichotomiser 3) 、C4.5、C5.0 决策树2. CART 决策树3. CHA…...

【算法】FIFO先来先淘汰算法分析和编码实战

背景 在设计一个系统的时候,由于数据库的读取速度远小于内存的读取速度 为加快读取速度,将一部分数据放到内存中称为缓存,但内存容量是有限的,当要缓存的数据超出容量,就需要删除部分数据 这时候需要设计一种淘汰机制…...

龙湖什么网站做宣传/外贸平台自建站

**章 简介Web应用程序的历史对servlet的支持servlet的优势第二章 HTTP Servlet基础HTTP基础Servlet API制作网页Web应用程序总结第三章 servlet的生命周期servlet的选择servlet重新载入init和destroy单线程模式后台处理启动时载入客户端缓存服务端缓存第四章 获取信息Servl…...

网站建设的技术准备/广告宣传费用一般多少

监控你的WEB服务器或者WEB主机运行是否正常与健康是非常重要的。你要确保用户始终可以打开你的网站并且网速不慢。服务器监控工具允许你收集和分析有关你的Web服务器的数据。 有许多非常好的服务器监控解决方案,而为了省去你寻找方案的麻烦,这里我为你列…...

企业所得税交多少/seo关键词优化报价价格

转自:http://blog.chinaunix.net/xmlrpc.php?rblog/article&id4808877&uid14528823 一、概念及基本原理 TLB即Translation Lookaside Buffer,是MMU中的一种硬件cache,用于缓存页表,即缓存线性地址(虚拟地址)到物理地址的…...

崇明建设镇政府门户网站/网站推广途径和推广要点有哪些?

因为HBase 数据储存按照 row key 排序,如果HBase表的 row key 是单调递增的,则HBase 容易有RegionServer 的局部热点问题。加盐可以缓解这个问题。 create table H3 (id varchar not null primary key, cf1.a varchar, cf2.b varchar) SALT_BUCKETS20; …...

别墅装修设计图片大全 效果图/seo基础知识包括什么

1. 随着经济的繁荣 with the booming of the economy 2. 随着人民生活水平的显著提高 with the remarkable improvement of peoples living standard 3. 先进的科学技术 advanced science and technology 4. 为我们日常生活增添了情趣 add much spice / flavor to our dail…...

北京哪个网站最好/新闻 最新消息

目录 设计重点流程图伪代码 2.1. PublishEvent 2.2. SubscribeEvent 2.3. Publisher 2.4. Subscriber微服务 强一致性 3.1 Publisher 3.2 Subscriber事件总线 - 跨服务 最终一致性 4.1 Publisher & Subscriber 都开启了本地事务,保证了强一致性 4.2 问题场景一&…...