spring cloud Refresh Scope
2024-03-27 10:25:55 7 举报
spring cloud Refresh Scope 简单流程
作者其他创作
大纲/内容
@RefreshScope
继承
BeanDefinitionRegistryPostProcessor#postProcessBeanDefinitionRegistry修改所有refresh scope 的bean 定义的 BeanClass
LockedScopedProxyFactoryBean在调用方法时会加上锁,每一个对象是不同的锁,在 get 的时候配置的
ScopedProxyFactoryBean简单说就是 aop 不会代理这个对象了,目标bean的代理会在 getBean 里面实现
ApplicationReadyEvent标记为已启动
AbstractBeanFactory#registerDisposableBeanIfNecessary注册销毁方法以及 bean 后置处理器
BeanFactoryPostProcessor#postProcessBeanFactory在注册 bean 的后置处理前调用
发送事件
GenericScope
BeanLifecycleWrapper包装对象,实现统一的获取销毁
eagerlyInitialize初始化当前 scope 的所有 bean
refreshrefreshAll直接销毁 bean
通过锁来保证只有一个线程能访问对象,在刷新时是不能提供服务的,需要排队
ContextRefreshedEvent当容器刷新时
onApplicationEvent
RefreshEvent启动后才会刷新
ScopedProxyFactoryBean#setBeanFactory通过 ProxyFactory 来创建一个代理对象,目标对象通过getBean获取
LockedScopedProxyFactoryBean#setBeanFactory把当前 advice 放到第一个,每次执行都加锁
get缓存包装的对象并设置好锁,保证只有一个线程能同时调用
RefreshEventListenerspringBoot 默认注入
RefreshScopeRefreshedEvent
nacos等配置中心都是在发现配置修改后发送该事件来触发 bean 的更新的
RefreshScope
AbstractBeanFactory#registerScope注册 scope
获取对象是是用过double check 获取对象
0 条评论
下一页