写点什么

Spring 系列之 IOC 容器初始化过程十

作者:王威07325
  • 2023-05-29
    上海
  • 本文字数:1082 字

    阅读完需:约 4 分钟

refresh 中的 destroyBeans、cancelRefresh 方法

没错,我又更新 spring 系列的文章了,IOC 系列文章到这篇文章就结束了。接下来会开始新的系列,有可能是多个系列同时更新,希望大家可以关注之后博主的动态。


destroyBeans

用于销毁此上下文管理的所有 bean 的模板方法。默认实现在此上下文中销毁所有缓存的单例,调用 DisposableBean.destroy()和/或指定的“destroy-method”。可以重写以在标准单例销毁之前或之后添加特定于上下文的 bean 销毁步骤,而上下文的 BeanFactory 仍然处于活动状态。


这个方法最终调用的是 DefaultLisableBeanFactory#destroySingletons 方法


代码:


public void destroySingletons() {    super.destroySingletons();    this.manualSingletonNames.clear();    clearByTypeCache();  }
复制代码


分部分讲解:


destroySingletons


public void destroySingletons() {    if (logger.isDebugEnabled()) {      logger.debug("Destroying singletons in " + this);    }    //指示我们当前是否在 destroySingletons 中的标志    synchronized (this.singletonObjects) {      this.singletonsCurrentlyInDestruction = true;    }        String[] disposableBeanNames;    synchronized (this.disposableBeans) {    //获取实现了DisposableBean接口的bean      disposableBeanNames = StringUtils.toStringArray(this.disposableBeans.keySet());    }    for (int i = disposableBeanNames.length - 1; i >= 0; i--) {      //销毁给定的bean。如果找到相应的一次性 bean 实例,则委托destroyBean       destroySingleton(disposableBeanNames[i]);    }    //下面这三行代码,都是清除相关的容器    this.containedBeanMap.clear();    this.dependentBeanMap.clear();    this.dependenciesForBeanMap.clear();    //清除缓存    clearSingletonCache();  }
复制代码


this#manualSingletonNames#clear


清除手动注册单例的名称列表(按注册顺序)


clearByTypeCache


删除关于按类型映射的任何假设

cancelRefresh

取消此上下文的刷新尝试,在引发异常后重置 active 标志


protected void cancelRefresh(BeansException ex) {    this.active.set(false);  }
复制代码

resetCommonCaches

重置 Spring 的公共核心缓存


protected void resetCommonCaches() {    ReflectionUtils.clearCache();    ResolvableType.clearCache();    CachedIntrospectionResults.clearClassLoader(getClassLoader());  }
复制代码


好了,到这,SpringIOC 系列的文章就算结束了,接下来的一个星期我会想好更新那个系列的文章,然后开始新的篇章!!!!

发布于: 刚刚阅读数: 6
用户头像

王威07325

关注

还未添加个人签名 2021-12-29 加入

还未添加个人简介

评论

发布
暂无评论
Spring系列之IOC容器初始化过程十_spring ioc_王威07325_InfoQ写作社区