面试宝典-【spring】

目录

1.Spring是什么 ?

2.Spring框架中的单例bean是线程安全的吗?

3.IOC容器是什么? 

4.什么是依赖注入? 

6.什么是AOP ?

7.IOC容器初始化过程? 

8.Bean的生命周期? 

9.BeanFactory和FactoryBean的区别? 

10.Bean注入容器有哪些方式?

11.Spring自动装配的方式有哪些? 

12.AOP有哪些实现方式? 

13.Spring通知有哪些类型? 

14.Spring中的事务是如何实现的?

15.Spring中事务失效的场景有哪些? 

16.Spring中的循环引用? 


1.Spring是什么 ?

  • Spring是一款主流的Java EE轻量级开源框架
  • 用于简化Java企业级应用的开发难度和开发周期

2.Spring框架中的单例bean是线程安全的吗?

  • 不是线程安全的
  • 当多用户同时请求一个服务时,容器会给每一个请求分配一个线程,这是多个线程会并发执行该请求对应的业务逻辑(成员方法),如果该处理逻辑中有对该单列状态的修改(体现为该单例的成员属性),则必须考虑线程同步问题。
  • Spring框架并没有对单例bean进行任何多线程的封装处理。

3.IOC容器是什么? 

loC-->“控制反转",它不是一门技术,而是一种设计思想

Spring通过loC容器来管理所有Java对象的实例化和初始化,控制对象与对象之间的依赖关系

  • 将对象的创建权交出去,交给第三方容器负责
  • 将对象和对象之间的关系维护权交出去,交给第三方容器负

4.什么是依赖注入? 

  • Spring创建对象的过程中,把对象依赖的属性注入到对象中。依赖注入主要有两种方式:构造器注入set注入

IOC就是一种思想,DI是对IOC的一种具体实现

6.什么是AOP ?

  • aop是面向切面编程,在spring中用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取公共模块复用,降低耦合,一般比如可以做为公共日志保存,事务处理等

7.IOC容器初始化过程? 

  • 1.从XML中读取配置文件。
  • 2.将bean标签解析成BeanDefinition,如解析property元素,并注入到BeanDefinition实例中。
  • 3.将BeanDefinition注册到容器BeanDefinitionMap中。
  • 4. BeanFactory 根据 BeanDefinition 的定义信息创建实例化和初始化 bean。

8.Bean的生命周期? 

Spring容器在进行实例化时,会将xml配置的<bean>的信息封装成一个BeanDefinition对象,Spring根据BeanDefinition来创建Bean对象,里面有很多的属性用来描述Bean

  • 1.bean对象的创建(调用无参构造)
  • 2.给bean对象设置相关属性
  • 3.bean后置处理器(初始化之前)
  • 4.bean对象初始化(调用指定的初始化方法)
  • 5.bean后置处理器(初始化之后)
  • 6.bean对象创建完成,可以使用了
  • 7.bean对象销毁(配置指定的销毁方法)
  • 8.IoC容器关闭

9.BeanFactory和FactoryBean的区别? 

  • BeanFactory:这是 loC 容器的基本实现,是 Spring 内部使用的接口。面向 Sping 本身,不提供给开发人员使用。几乎所有场合都使用ApplicationContext而不是底层的 BeanFactory
  • FactoryBean配置一个FactoryBean类型的bean,在获取bean的时候得到的并不是class属性中配置的这个类的对象,而是getObject()方法的返回值。

10.Bean注入容器有哪些方式?

  • 1.@Configuration用来声明一个配置类,然后使用 @Bean 注解,用于声明一个bean,将其加入到Spring容器中 
  • 2.@ComponentScan放置在我们的配置类上,然后可以指定一个路径,进行扫描带有特定注解的bean,然后加至容器中

11.Spring自动装配的方式有哪些? 

自动装配方式一: byType

  • byType:根据类型匹配IOC容器中的某个兼容类型的bean,为属性自动赋值
    • 若在IOC中,没有任何一个兼容类型的bean能够为属性赋值,则该属性不装配,即值为默认值null.
    • 若在IOC中,有多个兼容类型的bean能够为属性赋值,则抛出异常

自动装配方式二:byNam

  • byName:将自动装配的属性的属性名,作为bean的id在IOC容器中匹配相对应的bean进行赋值

bean标签里面的 id属性值必须和 自动装配的属性的属性名一致

12.AOP有哪些实现方式? 

  • AOP有两种实现方式:静态代理和动态代理。

静态代理

  • 静态代理:代理类在编译阶段生成,在编译阶段将通知织入Java字节码中,也称编译时增强。AspectJ使用的是静态代理。
  • 缺点:代理对象需要与目标对象实现一样的接口,并且实现接口的方法,会有冗余代码。同时,一旦接口增加方法,目标对象与代理对象都要维护。

动态代理

  • 动态代理:代理类在程序运行时创建,AOP框架不会去修改字节码,而是在内存中临时生成一个代理对象,在运行期间对业务方法进行增强,不会生成新类

13.Spring通知有哪些类型? 

  • 前置通知(Before):在目标方法被调用之前调用通知功能;
  • 后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么;
  • 返回通知(After-returning ):在目标方法成功执行之后调用通知;
  • 异常通知(After-throwing):在目标方法抛出异常后调用通知;
  • 环绕通知(Around):通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的逻辑。

14.Spring中的事务是如何实现的?

  • spring实现的事务本质就是aop完成,对方法前后进行拦截,在执行方法之前 开启事务,在执行完目标方法之后根据执行情况提交或者回滚事务。

15.Spring中事务失效的场景有哪些? 

  • ① 异常捕获处理,自己处理了异常,没有抛出,解决:手动抛出
  • ②抛出检查异常,配置rollbackFor属性为Exception
  • ③非public方法导致的事务失效,改为public

16.Spring中的循环引用? 

循环依赖:循环依赖其实就是循环引用,也就是两个或两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于A

循环依赖在spring中是允许存在,spring框架依据三级缓存已经解决了大部分的循环依赖

  • ① 一级缓存:单例池,缓存已经经历了完整的生命周期,已经初始化完成的bean对象
  • ② 二级缓存:缓存早期的bean对象(生命周期还没走完)
  • ③三级缓存:缓存的是ObjectFactory,表示对象工厂,用来创建某个对象的

解决方案

  • 使用@Lazy进行懒加载,什么时候需要对象再进行bean对象的创建

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营Day59 | 503.下一个更大元素 II、42.接雨水

503.下一个更大元素 II 这题看上去有循环似乎不好做&#xff0c;其实还是蛮简单的。只需要遍历两遍来模拟循环即可&#xff0c;遍历两边还找不到结果的遍历N遍也照样找不到结果。单调栈写法仍然与 739.每日温度 相同 vector<int> nextGreaterElements(vector<int>…

vue3+ts+element-plus实际开发之统一掉用弹窗封装

vue3tselement-plus实际开发之统一掉用弹窗封装 插槽1. 官网介绍先理解 插槽、具名插槽、 作用域插槽、动态插槽名、具名作用域插槽属性和使用方法 2. 统一调用弹窗封装dome实战- 使用场景&#xff1a;- 对el-dialog进行数据动态设置- 新建一个ts文件用于统一存放组件&#xff…

感谢Cognition公司AI程序员Devin为人类程序员提供新工作:AI驯兽师AI鼓励师AI接锅侠

讲动人的故事&#xff0c;写懂人的代码 初创公司Cognition最近推出的AI程序员Devin&#xff0c;只会给人类程序员增加3类新工作。 最近&#xff0c;初创公司Cognition告诉大家一个新闻&#xff1a;他们研发了个AI程序员&#xff0c;名叫Devin。 Devin能干这些事&#xff1a; …

四川古力未来科技抖音小店:行业标杆的崛起与未来展望

在当下这个数字化、网络化的时代&#xff0c;电商行业正以前所未有的速度迅猛发展。四川古力未来科技有限公司&#xff0c;凭借其敏锐的市场洞察力和创新精神&#xff0c;成功在抖音小店平台上崭露头角&#xff0c;成为行业内的佼佼者。今天&#xff0c;我们就来一起探讨四川古…

GEE错误——Dictionary does not contain key: VV_stdDev.

错误 ComputedObject (Error) Dictionary.get: Dictionary does not contain key: VV_stdDev. Line 39: Dictionary.get: Dictionary does not contain key: VV_stdDev. 主要解决方案是检查字典中是否包含键"VV_stdDev"的拼写是否正确。如果确保拼写正确&#xff0…

3分钟阿里云数据库购买、数据库创建和连接教程

阿里云数据库怎么使用&#xff1f;阿里云服务器网aliyunfuwuqi.com整理阿里云数据库从购买到使用全流程&#xff0c;阿里云支持MySQL、SQL Server、PostgreSQL和MariaDB等数据库引擎&#xff0c;阿里云数据库具有高可用、高容灾特性&#xff0c;阿里云提供数据库备份、恢复、迁…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的火焰与烟雾检测系统详解(深度学习模型+UI界面升级版+训练数据集)

摘要&#xff1a;本研究详细介绍了一种集成了最新YOLOv8算法的火焰与烟雾检测系统&#xff0c;并与YOLOv7、YOLOv6、YOLOv5等早期算法进行性能评估对比。该系统能够在包括图像、视频文件、实时视频流及批量文件中准确识别火焰与烟雾。文章深入探讨了YOLOv8算法的原理&#xff0…

Marin说PCB之如何利用CATIA软件把器件的3D模型导出2D格式文件

步骤一&#xff0c;打开CATIA软件&#xff0c;找到器件的3D模型文件。 如下图所示就是SD卡的3D模型图了。 若是我们想要把这个3D模型导出我们实际需要的2D的DXF或者是DWG格式的话&#xff0c;我们应该如何操作呢? 1,文件&#xff0c;新建一个DAWING格式的文件, 2&#xff0c;新…

Fix a Tree(树的遍历,判断是否有环 并连成一颗树 )

题意翻译 对于下图中的树&#xff0c; 可以用数组表示为 [2,3,3,2]。这种可以表示树的数组&#xff08;即有效&#xff09;需要符合以下条件&#xff1a; 有且只有一个索引 r &#xff0c;符合pr​r 。其中顶点 r 是树的根。对于所有剩下的 n−1 个顶点 i 一定要有在 i 和 pi…

SpringBoot3整合Mybatis-Plus与PageHelper包冲突解决

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; SpringBoot3整合Mybatis-Plus与PageHelper包冲突解决 ⏱️ 创作时间&a…

基础:TCP是什么?

1. TCP 是什么&#xff1f; TCP&#xff08;Transmission Control Protocol 传输控制协议&#xff09; 是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;由IETF的RFC 793 [1]定义。 TCP旨在适应支持多网络应用的分层协议层次结构。连接到不同但互连的计算机…

AI人员入侵识别摄像机

AI人员入侵识别摄像机是一种智能监控设备&#xff0c;利用人工智能技术辨认并报警可能的入侵行为。这种摄像机利用深度学习算法实时分析监控画面&#xff0c;识别出普通行人和潜在入侵者之间的差异&#xff0c;从而更准确地预警可能发生的安全事件。 该摄像机通过对比数据库中存…

redis 缓冲区详解(性能优化缓冲区优化)

目录 前言 客户端输入缓冲区 输出缓冲区 集群缓冲区 全量复制缓冲区问题 增量复制缓冲区问题 前言 在我的《Redis 为啥那么快》这篇文章中&#xff0c;详细总结了Redis 为啥那么快。今天当我要详细阐述Redis 的缓冲区时&#xff0c;意识到应该加上Redis 的缓冲区。我们假…

CC攻击详细

CC攻击是DDoS攻击的其中一种&#xff0c;是目前应用层攻击的主要手段之一&#xff0c;相比其它的DDoS攻击CC似乎更有技术含量一些。CC攻击借助代理服务器生成指向目标系统的合法请求&#xff0c;实现伪装和DDoS。我们都有这样的体验&#xff0c;访问一个静态页面&#xff0c;即…

c++基础语法—————默认成员函数

文章目录 一、构造函数&#xff08;初始化&#xff09;1.构造函数的名称与类名相同&#xff0c;没有返回类型&#xff0c;可以有参数。2.对象实例化时&#xff0c;编译器自动调用构造函数进行初始化3.若类中没有显示定义一个用户的构造函数&#xff0c;编译器则会自动生成一个默…

MCM箱模型的运行及结果分析,MCM建模技巧与参数设置、EKMA曲线绘制、大气O3来源解析

目录 一、大气中O3形成知识基础、MCM和Atchem 2原理及Linux系统安装 二、MCM建模、数据输入、模型运行及结果输出 三、O3形成途径、生成潜势及其敏感性分析 EKMA曲线及大气O3来源解析 更多应用 臭氧污染不仅对气候有重要影响&#xff0c;而且对人体健康、植物生长均有严重…

大门对楼梯,怎么办?

​ 中国是一个非常重视风水的国家&#xff0c;风水学发扬和流传已有几千年的历史&#xff0c;很多懂风水的人都知道&#xff0c;大门风水是其中非常重要的一环&#xff0c;因为大门风水直接影响全家人的各种运势。大门风水好&#xff0c;能帮助你一臂之力&#xff1b;若大门风…

加密货币在网络违法犯罪活动中的利用情况调查

一、调查背景 区块链基于分布式共识和经济激励等手段&#xff0c;在开放式、无许可的网络空间中&#xff0c;为价值的确立、存储、转移提供了新的解决方案。然而随着加密生态在过去若干年的快速发展&#xff0c;加密货币也越来越多地被用于各类风险活动&#xff0c;为网络赌博…

了解什么是 Redis 的雪崩、穿透和击穿?Redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 Redis 的穿透?

目录 一、面试官心理分析 二、面试题剖析 1. 缓存雪崩 2. 缓存穿透 3. 缓存击穿 一、面试官心理分析 其实这是问到缓存必问的&#xff0c;因为缓存雪崩和穿透&#xff0c;是缓存最大的两个问题&#xff0c;要么不出现&#xff0c;一旦出现就是致命性的问题&#x…

发票OCR-国税可进行的发票查验种类-接口文档

发票查验内容包括发票种类名称、发票代码、发票号码、金额、销售方名称、购买方名称等信息。可以在国家税务总局全国增值税发票查验平台上进行查验&#xff0c;也可以进入发票所属省、直辖市税务局官方网站的“我要查询-发票查询”模块进行查验&#xff0c;企业也可以通过发…
最新文章