一二三级缓存;
如何预防循环依赖;
创建两个service 业务层. 一个进行增删改查操作, 另一个处理业务逻辑, 然后尽量避免处理业务逻辑的业务层,不要注入到其他的业务层中。
第一级缓存:单例池
singletonObjects ConcurrentHasnMsp<beanName,bean对象>
作用:保证一个beanName对应唯一的Bean完整对象
第二级缓存
earlySingletonObjects HashMap<beanName,bean对象>
作用:保证一个beanName对应唯一的Bean不完整对象
第三级缓存(解决循环依赖)
singletonFactory HashMap<beanName,ObjectFactory(lambda表达式)>
作用:做一些预备工作。创建bean的时候先存到三级缓存,并不知道后面逻辑会不会用,会不会出现循环依赖等,防止出现循环依赖且AOP等场景;