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

SSM与SpringBoot面试题(一)

目录

一、如何理解 Spring Boot 中的 Starter

二、如何实现一个IOC容器

三、说一下Spring的事务机制

四、如何实现AOP,项目哪些地方用到了AOP

五、spring如何处理循环依赖问题

六、Spring中后置处理器的作用

七、Spring中什么时候@Transactional会失效


一、如何理解 Spring Boot 中的 Starter

使用spring+springmvc使用,如果需要引入mybatis等框架,需要到xml中定义mybatis需要的jbean
starter就是定义一个starter的jar包,写一个@Configuration配置类、将这些bean定义在里面,然后在starter包的META-INF/spring.factories中写入该配置类,springboot会按照约定来加载该配置类
开发人员只需要将相应的starter包依赖进应用,进行相应的属性配置(使用默认配置时,不需要配置),就可以直接进行代码开发,使用对应的功能了,比如mybatis-spring-boot-starter,spring-boot-starter-redis

二、如何实现一个IOC容器

1.配置文件中指定需要扫描的包路径
2.定义一些注解,分别表示访问控制层、业务服务层、数据持久层、依赖注入注解、获取配置文件注解
3.从配置文件中获取需要扫描的包路径,获取到当前路径下的文件信息及文件夹信息,我们将当前路径下所有以.class结尾的文件添加到一个Set集合中进行存储
4.遍历这个set集合,获取在类上有指定注解的类,并将其交给lOC容器,定义一个安全的Map用来存储这些对象
5.遍历这个IOC容器,获取到每一个类的实例,判断里面是有有依赖其他的类的实例,然后进行递归注入

三、说一下Spring的事务机制

1. Spring事务底层是基于数据库事务和AOP机制的
2. 首先对于使用了@Transactional注解的Bean,Spring会创建一个代理对象作为Bean
3. 当调用代理对象的方法时,会先判断该方法上是否加了@Transactional注解
4.如果加了,那么则利用事务管理器创建一个数据库连接
5. 并且修改数据库连接的autocommit属性为false,禁止此连接的自动提交,这是实现Spring事务非常重要的一步
6.然后执行当前方法,方法中会执行sql
7.执行完当前方法后,如果没有出现异常就直接提交事务
8.如果出现了异常,并且这个异常是需要回滚的就会回滚事务,否则仍然提交事务
9. Spring事务的隔离级别对应的就是数据库的隔离级别
10. Spring事务的传播机制是Spring事务自己实现的,也是Spring事务中最复杂的
11. Spring事务的传播机制是基于数据库连接来做的,一个数据库连接一个事务,如果传播机制配置为需要新开一个事务,那么实际上就是先建立一个数据库连接,在此新数据库连接上执行sql

四、如何实现AOP,项目哪些地方用到了AOP

利用动态代理技术来实现AOP,比如JDK动态代理或Cglib动态代理,利用动态代理技术,可以针对某个类生成代理对象,当调用代理对象的某个方法时,可以任意控制该方法的执行,比如可以先打印执行时间,再执行该方法,并且该方法执行完成后,再次打印执行时间。
项目中,比如事务、权限控制、方法执行时长日志都是通过AOP技术来实现的,凡是需要对某些方法做统一处理的都可以用AOP来实现,利用AOP可以做到业务无侵入。

五、spring如何处理循环依赖问题

循环依赖:多个对象之间存在循环的引用关系,在初始化过程当中,就会出现”先有蛋还是先有鸡”的问题。
一种是使用@Lazy注解:解决构造方法造成的循环依赖问题
另一种是使用三级缓存
一级缓存:缓存最终的单例池对象:private final Map<String, Object> singletonObjects = new
ConcurrentHashMap<>(256);
二级缓存:缓存初始化的对象:private final Map<String, Object>earlySingletonObjects = new
ConcurrentHashMap<>(16);
三级缓存:缓存对象的ObjectFactory: private final Map<String, ObjectFactory<?>>singletonFactories = new HashMap<>(16);
对于对象之间的普通引用,二级缓存会保存new出来的不完整对象,这样当单例池中找到不依赖的属性时,就可以先从二级缓存中获取到不完整对象,完成对象创建,在后续的依赖注入过程中,将单例池中对象的引用关系调整完成。
三级缓存:如果引用的对象配置了AOP,那在单例池中最终就会需要注入动态代理对象,而不是原对象。而生成动态代理是要在对象初始化完成之后才开始的。于是Spring增加三级缓存,保存所有对象的动态代理配置信息。在发现有循环依赖时,将这个对象的动态代理信息获取出来,提前进行AOP,生成动态代理。

六、Spring中后置处理器的作用

Spring中的后置处理器分为BeanFactory后置处理器和Bean后置处理器,它们是Spring底层源码架构设计中非常重要的一种机制,同时开发者也可以利用这两种后置处理器来进行扩展。BeanFactory后置处理器表示针对BeanFactory的处理器,Spring启动过程中,会先创建出BeanFactory实例,然后利用BeanFactory处理器来加工BeanFactory,比如Spring的扫描就是基于BeanFactory后置处理器来实现的,而Bean后置处理器也类似,Spring在创建一个Bean的过程中,首先会实例化得到一个对象,然后再利用Bean后置处理器来对该实例对象进行加工,比如我们常说的依赖注入就是基于一个Bean后置处理器来实现的,通过该Bean后置处理器来给实例对象中加了@Autowired注解的属性自动赋值,还比如我们常说的AOP,也是利用一个Bean后置处理器来实现的,基于原实例对象,判断是否需要进行AOP,如果需要,那么就基于原实例对象进行动态代理,生成一个代理对象。

七、Spring中什么时候@Transactional会失效

因为Spring事务是基于代理来实现的,所以某个加了@Transactional的方法只有是被代理对象调用时,那么这个注解才会生效,所以如果是被代理对象来调用这个方法,那么@Transactional是不会失效的。
同时如果某个方法是private的,那么@Transactional也会失效,因为底层cglib是基于父子类来实现的,子类是不能重载父类的private方法的,所以无法很好的利用代理,也会导致@Transactianal失效

http://www.jsqmd.com/news/699201/

相关文章:

  • REX-UniNLU新手入门:一行命令启动,可视化界面深度解析中文语义
  • 2026体制内考什么经济学专业证书有用?
  • 铁氟龙管符合食品医药行业卫生级国标安全输送要求吗? - 众鑫氟塑铁氟龙管
  • Linux 基础(一):系统认知、文件结构与人机交互
  • MCU端LLM推理落地倒计时(仅剩最后4类硬件约束未攻克):基于RISC-V D1 SoC的Token流式生成实战白皮书
  • GPU加速与树模型在制造业数据科学中的应用
  • Docker容器实践——Docker-Compose实现多容器的控制
  • 终极指南:如何用AlDente免费延长MacBook电池寿命50%
  • 武汉擎天仕劳务:靠谱的武汉设备吊装费用厂家 - LYL仔仔
  • AI赋能产品管理:PM Skills Marketplace 开源框架实战指南
  • 避开这些坑!SimpleFOC项目移植与电机初始化失败的常见原因排查
  • TVA技术在电池表观检测中的实操应用
  • BilldDesk终极指南:打破远程控制边界,开启跨平台协作新纪元![特殊字符]
  • biliTickerBuy:告别手速焦虑的B站会员购抢票终极指南
  • 廉颇老矣,尚能饭否:阿里 AI 正在打一场“翻身仗“
  • 2026年湖南长沙短视频运营与网络推广服务深度横评指南 - 年度推荐企业名录
  • 三小时精通Python微信机器人:从零到实战的完整指南
  • C++26反射成本控制最后防线(仅限首批ISO C++委员会审阅版文档披露的3条未公开约束规则)
  • 如何在5分钟内让PS4游戏体验翻倍?GoldHEN作弊管理器深度解析
  • 三步实现微信聊天记录永久保存:告别数据丢失,开启数字记忆新纪元
  • Arduino编程CH552
  • Arm Cortex-A55浮点与SIMD架构深度解析
  • Rust智能指针BoxRcArc使用场景
  • Ryujinx模拟器终极指南:从零开始畅玩Switch游戏
  • 2026年湖南长沙短视频运营与GEO智能推广深度横评:5大服务商官方对接指南 - 年度推荐企业名录
  • 如何永久保存微信聊天记录?这款开源工具让你完全掌控个人数据资产
  • 从javafx.util.Pair到Apache Commons Lang3:一个Java开发者踩过的那些‘键值对’小坑
  • 移动端架构演进与选型
  • 深入浅出 LangGraph —— 第2章:环境搭建与第一个Agent
  • 为什么你的AI语音处理项目需要ClearerVoice-Studio?5个核心场景深度解析