问题一:三级缓存的作用是什么?
三级缓存的作用是什么?
参考回答:
三级缓存,名为singletonFactories,是一个存储ObjectFactory的Map。当发生循环依赖时,最初的bean会被放入三级缓存,并通过调用getEarlyBeanReference方法返回一个相应的对象。这样,在bean创建过程中提供了一个提供代理的机会,从而解决循环依赖问题。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/615392
问题二:相互依赖的Bean在什么情况下可能会出现循环依赖异常?
相互依赖的Bean在什么情况下可能会出现循环依赖异常?
参考回答:
相互依赖的Bean只有在需要AOP或者动态代理时才有可能出现循环依赖异常。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/615394
问题三:Spring可以处理哪些场景下的循环依赖?
Spring可以处理哪些场景下的循环依赖?
参考回答:
正常情况下,原始Spring Bean无论怎样相互依赖,Spring都可以处理。同时,绝大多数存在AOP的场景Spring也是支持的。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/615395
问题四:Spring是如何处理Bean A的创建过程中发现这种情况的?
Spring是如何处理Bean A的创建过程中发现这种情况的?
参考回答:
Spring会先将未完全初始化的Bean A封装成SingletonFactory放入三级缓存。在创建Bean C并发现其依赖Bean A时,会从三级缓存中获取这个未完全初始化的Bean A。如果需要,会对Bean A进行动态代理并返回代理对象;如果不需要代理,则返回原始的Bean A。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/615396
问题五:初始化Bean A的过程中,什么情况下会抛出异常?
初始化Bean A的过程中,什么情况下会抛出异常?
参考回答:
如果在Bean A的初始化过程中,有其他的BeanPostProcessor对Bean A的代理方式有单独处理,导致Bean A被再次代理,且这个新的代理与已注入到Bean C中的Bean A(无论是否被代理)不再是同一个Bean,这时会抛出异常。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/615397