山西p2p网站建设,住房和城乡建设部网站,网络推广专员任职要求,东营网站bean的生命周期
Spring容器在进行实例化时#xff0c;会将xml配置的的信息封装成一个BeanDefinition对象#xff0c;Spring根据BeanDefinition来创建Bean对象#xff0c;里面有很多的属性用来描述Bean。 其中比较重要的是#xff1a;
beanClassName#xff1a;bean 的类…bean的生命周期
Spring容器在进行实例化时会将xml配置的的信息封装成一个BeanDefinition对象Spring根据BeanDefinition来创建Bean对象里面有很多的属性用来描述Bean。 其中比较重要的是
beanClassNamebean 的类名initMethodName初始化方法名称properryValuesbean 的属性值scope作用域lazyInit延迟初始化
循环引入
建议去看https://www.bilibili.com/video/BV1yT411H7YK?p40 解决方案
如果是set注入引起的循环依赖spring提供的三级缓存大部分都可以解决。 如果是构造方法中就存在循环依赖那么用Lazy解决。
三级缓存 若只有一级缓存 二级缓存作用 但是二级缓存无法处理代理对象因此有了三级缓存的存在。
二级缓存最核心的作用是通过A的对象工厂创建代理对象如果是多例的话就会创建多个。直接把他们都放到二级缓存中方便管理且每次需要的话直接从里面拿就好了
三级缓存 源码个人学习存档用
//单实例对象注册器
public class DefaultSingletonBeanRegistry extends SimpleAliasRegistry implements SingletonBeanRegistry {private static final int SUPPRESSED_EXCEPTIONS_LIMIT 100;private final MapString, Object singletonObjects new ConcurrentHashMap(256);private final MapString, ObjectFactory? singletonFactories new HashMap(16);private final MapString, Object earlySingletonObjects new ConcurrentHashMap(16);
}Lazy