框架篇
Spring-单例bean是线程安全的吗
问答环节
Spring-AOP相关面试题
问答流程
Spring-事务失效的场景
异常捕获处理
抛出检查异常
非public方法
问答环节
Spring-bean的生命周期
BeanDefinition
bean 流程
问答环节
Spring-bean的循环依赖(循环引用)
什么是Spring的循环依赖?
三级缓存解决循环依赖
二级缓存即可解决循环依赖
实例化的原始对象就是仅经过构造函数过后的对象,还没有经历后面的依赖注入等,所以是“半成品”
三级缓存解决代理对象问题
其实本质上来说,3级缓存缓存的就是对象的地址,通过把地址给B对象来走完B的流程
代理是在Bean的初始化后执行的,但是二级缓存是在对象实例化后写入的,因此二级缓存会丢失代理的“特性”
构造方法出现了循环依赖怎么解决?
三级缓存能够解决初始化过程中的循环依赖,不能解决构造函数产生的循环依赖
构造函数对应生命周期,构造未完成,连对象实例都没有,只能延迟某个对象的注入,才能解决
问答流程
这里面为什么也要有二级缓存,因为在流程进行中,三级缓存中产生的对象在第一次会放到二级缓存中,供后面的流程获取对象时使用,可以直接从二级缓存中获取到这个对象。如果没有二级缓存,将会导致每次都要从三级缓存中去创建对象,每次都要重新生成。