这篇文章主要是学习《Spring源码深度解析》后对重载的getSingleton方法的学习总结
关联文章
Spring源码学习总结(三):从bean实例获取对象(getObjectForBeanInstance)
这个方法是在缓存中没有获取单例后,才会执行的,如下面代码
protected <T> T doGetBean(final String name, @Nullable final Class<T> requiredType,
@Nullable final Object[] args, boolean typeCheckOnly) throws BeansException {
...
//尝试从缓存加载
Object sharedInstance = getSingleton(beanName);
if (sharedInstance != null && args == null) {
//从缓存中获取到了
...
bean = getObjectForBeanInstance(sharedInstance, name, beanName, null);
}
//没有从缓存获取到
else {
...
if (mbd.isSingleton()) {
//调用重载后的getSingleton方法,就是本文要总结的方法
sharedInstance = getSingleton(beanName, () -> {
try {
return createBean(beanName, mbd, args);
}
catch (BeansException ex) {
destroySingleton(beanName)