Spring相关

4.Spring

Spring的aop顺序

  • AOP常用注解

    • @Before
      • 前置通知:目标方法之前执行
    • @After
      • 后置通知:目标方法之后执行(始终执行)
    • @AfterReturning
      • 返回后通知:执行方法结束前执行(异常不执行)
    • @AfterThrowing
      • 异常通知:出现异常时候执行
    • @Around
      • 环绕通知:环绕目标方法执行
  • 面试题

    • 你肯定知道Spring,那说说aop的全部通知顺序,
    • SpringBoot或SpringBoot2对AOP的执行顺序影响?
    • 说说你使用AOP中碰到的坑?
    • 。。。
  • 业务类

    • 接口CalcService
    • 接口实现类CalcServiceImpl新加@Service
    • 想在除法方法前后置入各种通知,引入切面编程
  • 新建一个切面类MyAspect并为切面类新增两个注解

    • @Aspect
      • 指定一个类为切面类
    • @Component
      • 纳入spring容器管理
    • code
  • Spring4+SpringBoot1.5.9

    • pom
      image
      image-1669465475669
      image-1669465521329

    • 测试类

      • 报错:java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=…) with your test

      解决:单元测试的测试类一定要和启动类在同一个根目录下。

    • aop正常顺序+异常顺序
      image-1669465613728

  • Spring5+SpringBoot2.3.3

    • pom
      springboot改为2.3.3
    • 测试类
    • aop正常顺序+异常顺序
  • 结论
    image-1669465695529

Spring的循环依赖

  • 恶心的大厂面试题
    image-1669465718979
    • 你解释下spring中的三级缓存?
    • 三级缓存分别是什么?三个Map有什么异同?
    • 什么是循环依赖?请你谈谈?看过Spring源码吗?一般我们说的Spring容器是什么?
    • 如何检测是否存在循环依赖?实际开发中见过循环依赖的异常吗?
    • 多例的情况下,循环依赖问题为什么无法解决?
    • 。。。。
  • 什么是循环依赖
    • 多个Bean之间相互依赖,形成了一个闭环。比如:A依赖于B、B依赖于C、C依赖于A
      • 代码
        image-1669465821084
    • 通常来说,如果问spring容器内部如何解决循环依赖,一定是指默认的单例bean中,属性互相引用的场景
      image-1669465863633
  • 两种注入方式对循环依赖的影响
    • 循环依赖官网说明
      官网地址
      image-1669465911711
    • 结论:
      • 我们AB循环依赖问题只要A的注入方式是setter且singleton, 就不会有循环依赖问题
  • spring容器循环依赖报错演示:BeanCurrentlyInCreationException
    • 循环依赖现象在Spring容器中注入依赖的对象,有两种情况
      • 构造器方式注入依赖
        • code
          • ServiceA
          • ServiceB
          • ClientConstructor
        • 结论
          • 构造器循环依赖是无法解决的,你想让构造器注入支持循环依赖,是不存在的
            image-1669466026465
      • 以set方式注入依赖
        • code
          • ServiceAA
          • ServiceBB
          • ClientSet
    • 重要code案例演示
      • code-java基础编码
        • A
          image-1669466111807
        • B
          image-1669466120136
        • ClientCode
          image-1669466132193
      • spring容器
      • 重要结论(spring内部通过三级缓存来解决循环依赖)
        • DefaultSingletonBeanRegistry
          image-1669466299269
        • 循环依赖Debug-困难,请坚持
          • 实例化 /初始化
            • 实例化
              • 内存中申请一块内存空间
              • 租赁好房子,自己的家具东西还没有搬家进去
            • 初始化 属性填充
              • 完成属性的各种赋值
              • 装修、家电家具进场
          • 三个Map和四大方法,总体相关对象
            image-1669466361964
            image-1669466375045
          • A/B两对象在三级缓存中的迁移说明
            image-1669466402189
            image-1669466417318
          • 全部Debug断点
            image-1669466431663
      • 总结Spring是如何解决的循环依赖?
        • 解释
          image-1669466461113
          image-1669466474967
        • Debug的步骤—>spring解决循环依赖的过程
          image-1669466493636
          image-1669466502978

彩蛋

  • 1.Spring考点大纲
    image-1669466535275
  • 2.代码地址
  • 3.打断点的艺术(如何定位bean在哪里创建-一步步debug,然后清除无关日志,排除缩小范围)
    • 光标和debug断点合并到一处
      image-1669466594026
    • 步过
    • 步入
    • 强制步入
    • 跳出
    • resume program跳转到下一个断点
  • 4.读spring源码非常提升内功
    • 断点入口寻找
  • 5.做难事必有所得
  • 6.走一遍Spring循环依赖底层代码,别的源码就不怕了
    -
最近的文章

Redis相关

5.Redis1.安装redis 6.0.8官网地址:redis中文官网地址:redis安全bug按照官网提示,升级成为6.0.82.Redis传统五大数据类型的落地应用官网命令大全网址:command8大类型1.String(字符类型)2.Hash(散列类型)3.List(列表类型)4.Set(集…

继续阅读
更早的文章

JUC之LockSupport,AQS

1.题目+说明核心概念提取synchronized与可重入锁AQS2.可重入锁(又名递归锁)说明“可重入锁”这四个字分开来解释可:可以重:再次入:进入锁:同步锁进入什么:进入同步域(即同步代码块/方法或显式锁锁定的代码)一句话一个线程中的多个流程可以获取同一把锁,持有这把同步锁可以再次进入自己可以获…

继续阅读