spring cloud 是如何实现自动刷新bean的?

对,没错就是这个注解
@RefreshScope 以及RefreshScope这个类,具体可以看看
https://blog.csdn.net/u013076044/article/details/78069256
这里对ScopeFactoryBean的解释

别的代理都是代理同一个bean,但是这个代理牛逼,只是存一下代理的类的信息,每一次都去beanfactory去取。

在这个里面的refresh方法

public boolean refresh(String name) {
        if (!name.startsWith(SCOPED_TARGET_PREFIX)) {
            // User wants to refresh the bean with this name but that isn't the one in the
            // cache...
            name = SCOPED_TARGET_PREFIX + name;
        }
        // 注销bean
        if (super.destroy(name)) {
            // 然后发送一下刷新scope的事件
            this.context.publishEvent(new RefreshScopeRefreshedEvent(name));
            return true;
        }
        return false;
    }

对应的destory()方法

protected boolean destroy(String name) {
        BeanLifecycleWrapper wrapper = this.cache.remove(name);
        if (wrapper != null) {
            Lock lock = locks.get(wrapper.getName()).writeLock();
            lock.lock();
            try {
                wrapper.destroy();
            }
            finally {
                lock.unlock();
            }
            this.errors.remove(name);
            return true;
        }
        return false;
    }

不是特别清晰,只要知道RefreshScope就好了,后面有空再整理一下

你可能感兴趣的:(spring cloud 是如何实现自动刷新bean的?)