2024年05月12日
Spring Bean 注册
Spring 三级缓存
一级缓存这样存放成品 Bean,不能解决循环依赖的问题的。因为 A 的成品创建依赖于 B,B的成品创建又依赖于 A,当需要补全B的属性时 A 还是没有创建完,所以会出现死循环。
二级缓存用于存放半成品对象,继续创建,创建的半成品同样放到缓存中。
三级缓存主要是解决 Spring AOP 的特性。AOP 本身就是对方法的增强,是
ObjectFactory<?>
类型的 lambda 表达式,而 Spring 的原则又不希望将此类类型的 Bean 前置创建,所以要存放到三级缓存中处理。
聊一下 ThreadLocal
ThreadLocal
底层采用的是数组结构存储数据。new ThreadLocal<>().remove();
操作。避免弱引用发生GC后,导致内存泄漏的问题。