问题一:为什么Spring可能不支持构造器内的强依赖注入?
为什么Spring可能不支持构造器内的强依赖注入?
参考回答:
此种注入场景都可以用Spring支持的其他方式(例如,使用setter注入、字段注入或ObjectProvider等)代替,且这类场景在实际应用中极少出现。因此,Spring可能认为没有必要特别支持构造器内的强依赖注入。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/615387
问题二:什么是一级缓存?它在Spring中起什么作用?
什么是一级缓存?它在Spring中起什么作用?
参考回答:
一级缓存是一个在DefaultSingletonBeanRegistry类中定义的ConcurrentHashMap,名为singletonObjects。它是最基础的单例缓存,主要作用是限制bean在beanFactory中只存一份,即实现singleton scope。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/615388
问题三:二级缓存的作用是什么?它与三级缓存是如何配合使用的?
二级缓存的作用是什么?它与三级缓存是如何配合使用的?
参考回答:
二级缓存,名为earlySingletonObjects,用于缓存未初始化未填充属性的提前暴露的Bean。当存在循环依赖时,这个缓存与三级缓存配合使用。三级缓存中的ObjectFactory被调用后,会返回一个早期暴露的Bean,并将其放入二级缓存,同时删除三级缓存中的对应项。这样,后续其他依赖该对象的Bean获取的都是同一个earlyBean,保证singleton原则。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/615389
问题四:为什么要引入二级缓存?
为什么要引入二级缓存?
参考回答:
引入二级缓存主要是为了解决在有AOP场景时的循环依赖问题。如果没有二级缓存,而只有三级缓存,使用者可能需要做重复性判断,这是不可控的,很容易出现问题。二级缓存确保了所有依赖该对象的Bean获取的都是同一个earlyBean,既满足了singleton原则,又避免了不必要的判断和浪费。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/615390
问题五:如果没有二级缓存,可以解决循环依赖问题吗?
如果没有二级缓存,可以解决循环依赖问题吗?
参考回答:
如果没有二级缓存,理论上仍然有可能解决循环依赖问题,但可能会增加实现的复杂性和出错的可能性。二级缓存的引入简化了处理过程,并确保了在有AOP场景时,循环依赖的正确处理。
关于本问题的更多回答可点击原文查看:https://developer.aliyun.com/ask/615391