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

八股学习 框架篇(spring mybatis)

八股学习 框架篇(spring mybatis)

  • 常见面试范围
    • Spring
    • Mybatis
  • Spring相关问题
    • 单例Bean线程是否安全?
    • AOP
    • Spring事务
    • 事务失效
    • Bean的生命周期
    • 循环引用(循环依赖)

常见面试范围

Spring

  • Spring
    • Bean 线程安全问题;
    • AOP、事务原理、事务失效;
    • Bean生命周期
    • 循序依赖
  • SpringMVC
    • 执行流程
  • SpringBoot
    • 自动配置原理

Mybatis

  • 执行流程
  • 延迟加载
  • 一二级缓存

Spring相关问题

单例Bean线程是否安全?

不是线程安全的
Spring框架中有一个 @Scope 注解,默认的值就是 singleton,单例的。
因为一般在spring的bean的中都是注入无状态的对象,没有线程安全问题,如果在bean中定义了可修改的成员变量,是要考虑线程安全问题的,可以使用多例或者加锁来解决;

AOP

AOP称为面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为"切面"(Aspect),减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。
常见的AOP使用场景:

  • 记录操作日志
  • 缓存处理
  • Spring中内置的事务处理

核心:使用aop中的环绕通知+切点表达式(找到要记录日志的方法),通过环绕通知的参数获取请求方法的参数类、方法、注解、请求方式等),获取到这些参数以后,保存到数据库

Spring事务

Spring支持编程式事务管理和声明式事务管理两种方式

  • 编程式事务控制:需使用TransactionTemplate来进行实现,对业务代码有侵入性,项目中很少使用;
  • 声明式事务管理:声明式事务管理建立在AOP之上的。其本质是通过AOP功能,对方法前后进行拦截,将事务处理的功能编织到拦截的方法中,也就是在目标方法开始之前加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务;

在这里插入图片描述

事务失效

Spring事务失效通常由以下几种原因造成:

  • 异常捕获处理,自己处理了异常,没有抛出;事务通知只有捉到了目标抛出的异常,才能进行后续的回滚处理,如果目标自己处理掉异常,事务通知无法知悉;
  • 抛出检查异常(例如FileNotFoundException),Spring 默认只会回滚非检查异常;
  • 非Public方法导致的事务失效,Spring 为方法创建代理、添加事务通知、前提条件都是该方法是 public 的;

Bean的生命周期

  • BeanDefinition:Spring容器在进行实例化时,会将xm|配置的的信息封装成一个BeanDefinition对象,Spring根据BeanDefinition来创建Bean对象,里面有很多的属性用来描述Bean;在这里插入图片描述

    • beanClassName:bean类名;
    • initMethodName:初始化方法名称;
    • properryValuess:bean的属性值;
    • scope:作用域;
    • lazyInit:延迟初始化;
  • 整体生命周期
    在这里插入图片描述

循环引用(循环依赖)

循环引用如例所示,在创建A对象的同时需要使用的B对象,在创建B对象的同时需要使用到A对象;
在这里插入图片描述
循环依赖产生过程

在这里插入图片描述
三级缓存解决循环依赖:对应的三级缓存如下:
在这里插入图片描述
在这里插入图片描述
三级缓存具体解决流程
在这里插入图片描述
构造方法出现循环依赖
在这里插入图片描述
原因:由于bean的生命周期中构造函数是第一个执行的,spring框架并不能解决构造函数的的依赖注入;
解决方案:使用@Lazy进行懒加载,什么时候需要对象再进行bean对象的创建;
在这里插入图片描述


http://www.kler.cn/a/514105.html

相关文章:

  • C语言小项目——通讯录
  • 服务器日志自动上传到阿里云OSS备份
  • 【生产力工具】ChatGPT for Windows桌面版本安装教程
  • 资料03:【TODOS案例】微信小程序开发bilibili
  • BottomNavigationBar组件的用法
  • MFC 使用 32位带Alpha通道的位图
  • 浅谈Java之AJAX
  • #HarmonyOS篇:build-profile.json5里面配置productsoh-package.json5里面dependencies依赖引入
  • 【网络协议】【http】【https】TLS1.3
  • PIM原理与配置
  • Redis 集群模式入门
  • 66,【6】buuctf web [HarekazeCTF2019]Avatar Uploader 1
  • 一文大白话讲清楚webpack基本使用——9——预加载之prefetch和preload以及webpackChunkName的使用
  • 2025年01月21日Github流行趋势
  • 简识JVM栈帧中的局部变量表
  • XML外部实体注入--XML基础
  • git常用命令学习
  • elementUI Table组件实现表头吸顶效果
  • DuckDB:Golang操作DuckDB实战案例
  • 两个React项目部署在同一个域名,一个主地址,一个子地址,二级白屏等问题
  • 鸿蒙参考文档和问题记录
  • Python Web开发:使用FastAPI构建社交网络系统
  • 戴尔电脑用u盘重装系统_戴尔电脑用u盘重装win10系统教程
  • HTML 文本格式化详解
  • redis 5.0版本和Redis 7.0.15的区别在哪里
  • C#高级:用Csharp操作鼠标和键盘