当Aservice类里有Bservice,当Bservice类里有Aservice时,
创建a时,需要赋值b,创建b时需要赋值a。此时都没有创建完成,无法赋值。
解决方法:spring的三级缓存。
当A创建实例时形成一个原始对象,当有循环依赖时提前经过aop形成代理对象,放入map(二级缓存),判断a正在创建中,可以在创建之前加入一个createmap,创建之后移除。
创建b时先从单例池(一级缓存)取,没有从代理对象的map取,没有的话说明a正在创建中,从原始对象中取到形成代理对象。
当b,c,同时形成a的代理对象时,与A的单例冲突。于是当。。。.三级缓存还没听懂。。。。
网友评论