What is RefreshScope ? 

   RefreshScope(org.springframework.cloud.context.scope.refresh)是spring cloud提供的一种特殊的scope实现,用来实现配置、实例热加载。 RefreshScope继承关系如下所示
 
RefreshScope

 

 

 

 

 

 

 

 

 

 

 Scope -> GenericScope -> RefreshScope,Scope是Spring2.0开始有的概念,主要是用于定义spring的注入范围。GenericScope 是 一个通用Scope实现。

 

2. RefreshScope实现原理

要想了解RefreshScope的实现原理,首先要了解Scope在Springboot生命周期中涉及到的功能点

 2.1 Scope在创建Bean实例

AbstractBeanFactory#doGetBean
此方法返回一个Bean对象
  /*
     * Return an instance, which may be shared or independent, of the specified bean.
     */
    protected <T> T doGetBean(...) {
        final String beanName = transformedBeanName(name);
        Object bean;
        // Eagerly check singleton cache for manually registered singletons.
        Object sharedInstance = getSingleton(beanName);
        if (sharedInstance != null && args == null) {
            ...
            bean = getObjectForBeanInstance(sharedInstance, name, beanName, null);
        }

    }else {
        // Fail if we're already creating this bean instance:
        // We're assumably within a circular reference.
        ...
        // Check if bean definition exists in this factory.
        ...
        // Guarantee initialization of beans that the current bean depends on.
        ....
        //Create bean instance.
        if (mbd.isSingleton()) {
        ...
        } else if (mbd.isPrototype())
            ...

        {
            String scopeName = mbd.getScope();
            final Scope scope = this.scopes.get(scopeName);
            Object scopedInstance = scope.get(beanName, new ObjectFactory<Object>() {...
            });
        ...
        }
        ...
    }

  

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-18
  • 2021-06-06
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2021-06-27
  • 2022-12-23
  • 2022-01-11
  • 2022-02-16
  • 2022-12-23
相关资源
相似解决方案