面试专题:spring

news2024/11/26 12:49:10

涉及到spring的问题都离不开IOC和AOP.AOP实现原理、动态代理和静态代理、Spring IOC的初始化过程、IOC原理、自己怎么实现一个IOC容器? 这些东西都是经常会被问到的。

IOC是什么:

Ioc即控制反转,把原来的代码里需要实现的对象创建,依赖反转给容器来帮忙实现,需要创建一个容器并且需要一种描述让容器知道要创建的对象间的关系,在Spring中管理对象及其依赖关系是通过Spring IOC容器实现的。Ioc的实现方式有依赖注入和依赖查找,由于依赖查找使用的很少,因此Ioc也叫做依赖注入。依赖注入指对象被动地接收依赖类而不用自己主动去找,对象不是从容器中查找它依赖的类,而是在容器实例化对象时主动将它依赖的类注入给它。假设一个Car类需要一个Engine的对象,那么一般需要手动new 一个Engine,利用Ioc就只需要定义一个私有的Engine类型的成员变量,容器会在运行时自动创建一个Engine的实例对象并将引入自动注入给成员变量。

AOP是什么?

AOP即面向切面编程,通过预编译和运行期动态代理实现程序功能的统一维护。常用场景:权限认证、自动缓存、错误处理、日志、调试和事务等。

1.Spring Bean 的作用域

 2.Spring 事务中的隔离级别

TransactionDefinition 接口中定义了五个表示隔离级别的常量:
TransactionDefinition.ISOLATION_DEFAULT: 使用后端数据库默认的隔离级别,Mysql 默认采用的
REPEATABLE_READ 隔 离 级 别 Oracle 默 认 采 用 的 READ_COMMITTED 隔 离 级 别 . TransactionDefinition.ISOLATION_READ_UNCOMMITTED: 最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读
TransactionDefinition.ISOLATION_READ_COMMITTED: 允许读取并发事务已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生
TransactionDefinition.ISOLATION_REPEATABLE_READ: 对同一字段的多次读取结果都是一致的,除非数据是被本身事务自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。TransactionDefinition.ISOLATION_SERIALIZABLE: 最高的隔离级别,完全服从ACID的隔离级别。所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻   读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

3.Spring 事务中的事务传播行为

支持当前事务的情况:
TransactionDefinition.PROPAGATION_REQUIRED: 如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
TransactionDefinition.PROPAGATION_SUPPORTS: 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
TransactionDefinition.PROPAGATION_MANDATORY: 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。(mandatory:强制性)
不支持当前事务的情况:
TransactionDefinition.PROPAGATION_REQUIRES_NEW: 创建一个新的事务,如果当前存在事务,则把当前事务挂起。
TransactionDefinition.PROPAGATION_NOT_SUPPORTED: 以非事务方式运行,如果当前存在事务,则把当前事务挂起。
TransactionDefinition.PROPAGATION_NEVER: 以非事务方式运行,如果当前存在事务,则抛出异常。

其他情况:
TransactionDefinition.PROPAGATION_NESTED: 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED。

4.AOP

AOP思想的实现一般都是基于  代理模式   ,在JAVA中一般采用JDK动态代理模式,但是我们都知道,JDK动态代理模式只能代理接口而不能代理类。因此,Spring  AOP  会这样子来进行切换,因为Spring  AOP  同时支持 CGLIB、ASPECTJ、JDK动态代理。
如果目标对象的实现类实现了接口,Spring AOP 将会采用 JDK 动态代理来生成 AOP 代理类;
如果目标对象的实现类没有实现接口,Spring AOP 将会采用 CGLIB 来生成 AOP 代理类——不过这个选择过程对开发者完全透明、开发者也无需关心。

5.Spring IOC的初始化过程:

 

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

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

相关文章

使用conda安装配置python环境

使用conda安装配置python环境 下载 我这里下载的是2-4.7.12.1,具体可以参考如下地址:https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/ wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/Miniconda2-4.7.12.1-Linux-x86_64.s…

d3dcompiler_47.dll缺失怎么修复?那个方法修复更简单

再运行游戏或者ps等软件,计算机系统提示找不到d3dcompiler_47.dll是怎么回事?相信困扰着不少小伙伴,其实d3dcompiler_47.dll是Microsoft 的 DirectX 11核心组件之一,它主要用于编译和运行 Direct3D 11应用程序和游戏。如果文件丢失…

编译安装LAMP

一、Apache网站服务: 1. Apache的起源(多系统兼容): Apache HTTPD Server 简称 Apache,是 Apache 软件基金会的一个开源的网页服务器, 可以在大多数计算机操作系统中运行,由于其多平台和安全性…

美国国家量子计划咨询委员会发布更新国家量子计划建议

​ (图片来源:网络) 耗资12亿美元的美国国家量子计划(NQI)于2018年12月颁布,该计划为期10年,现在将开展审查前五年的活动,并对今后五年的推进计划提出建议。为此,美国国…

[经验]PMP快速通过指南

我的备考经验: 1一阶段:铺底,花费时间1.5周左右 主要是熟悉考试框架和内容,通过看网盘资料里的章节重点解析视频课后习题。 先看框架你就很清楚的了解下来,PMP考试把项目管理的过程拆解成了5大过程组(启…

压力测试-JMeter安装、入门、结果分析

目录 1.写在前面 2.常用压测工具 3.压测机环境准备:JMeter部署 3.1 JMeter下载安装&启动&配置 3.2 入门案例 3.2.3、压测结果解释 3.2.4、线程属性参数原理 1.写在前面 等到服务上线后,在业务压力的冲击下,会发现程序运行非常…

CATIA和SolidWorks孰强孰弱?对比一下就知

寻找合适的 CAD 程序可能会很棘手,因为它是一种您将投资并使用的工具,您需要确保做出正确的决定。这篇文章将用于帮助区分 CATIA 和SOLIDWORKS之间的差异,以帮助您确定两者中哪一个最适合您的业务。 谁使用 CATIA? CATIA 于 198…

Selenium教程__环境安装(1)

Selenium是一个用于Web应用程序自动化测试工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。 Selenium基本上支持主流的浏览器,包括IE,Mozilla Firefox,Safari,Google Chrome,Opera等。 …

请求与响应

设置映射路径 在不同的bean中可能会出现相同名字的路径,这样的情况会产生冲突,为了解决这个冲突我们可以设置模块名作为请求路径前缀 Controller RequestMapping("/book") public class BookController {//设置当前操作的访问路径RequestMa…

Rust语言从入门到入坑——(4)Rust语法(下)

文章目录 0 引入1、结构体1. 1 结构体1. 2 结构体方法1. 3 元组结构体 2、枚举类2.1 match2.2 Option 枚举类 3、集合3.1 向量(Vector)3.2 字符串(String)3.1 映射表(Map) 4、总结 0 引入 在这里我们需要介…

DOM4J解析web.xml文件,实例化Servlet

1、DOM4J解析web.xml文件实例化Servlet 原理分析:我们解析用户在地址栏中输入的地址信息如add.do,用这个地址去web.xml文件中通过DOM4J技术,解析判断add.do对应的是哪个url-pattern,找到后获取对应的servlet-name。在用这个servlet-name去找…

servlet规范过滤器

我们可以把servlet程序看作是一个最终要执行的目标。我们可以使用过滤器filter来添加过滤代码,这个过滤代码可以添加到servlet执行之前,也可以添加到servlet执行之后。Filter可以做到在servlet这个目标程序执行之前过滤,也可以在目标程序执行…

【深度学习】BERT变种—百度ERNIE 3.0

预训练的模型在各种自然语言处理(NLP)任务中取得了最先进的成果。扩大预训练语言模型的规模可以提高其泛化能力。然而,现有的大规模预训练模型,主要依赖纯文本学习,缺乏大规模知识指导学习,模型能力存在局限…

尚硅谷大数据Flink1.17实战教程-笔记02【部署】

尚硅谷大数据技术-教程-学习路线-笔记汇总表【课程资料下载】视频地址:尚硅谷大数据Flink1.17实战教程从入门到精通_哔哩哔哩_bilibili 尚硅谷大数据Flink1.17实战教程-笔记01【Flink概述、Flink快速上手】尚硅谷大数据Flink1.17实战教程-笔记02【Flink部署】尚硅谷…

pycharm-设置python文件模板及常用的模板内容使用

pycharm设置文件和代码(File and Code Templates)模板步骤如下: 1.pycharm工具栏"file"->"Settings"->"Editor"->"Code Style"->"File and Code Templates",点击右侧python …

Badboy内置浏览器,提示脚本错误解决方法

Badboy内置浏览器,提示脚本错误解决方法 使用Badboy录制脚本的时候,浏览器弹框提示 “!当前页面的脚本发生错误。” 使用Badboy录制脚本的时候,弹框提示“当前页面的脚本发生错误” 解决方案1:在弹窗中选中不再弹出…

Java IO 学习总结(三)BufferedInputStream 缓冲流

Java IO 学习总结(一)输入流/输出流 Java IO 学习总结(二)File 类 Java IO 学习总结(三)BufferedInputStream 前言: 学习IO流,记录并分享。文章如有错误,恳请指正。 B…

云上使用 Stable Diffusion ,模型数据如何共享和存储

随着人工智能技术的爆发,内容生成式人工智能(AIGC)成为了当下热门领域。除了 ChatGPT 之外,文本生成图像技术更令人惊艳。 Stable Diffusion,是一款开源的深度学习模型。与 Midjourney 提供的直接将文本转化为图像的服…

基于JAVA的心理咨询预约系统

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取项目下载方式🍅 一、项目背景介绍: 心理健康在现代社会中…