加入收藏 | 设为首页 | 会员中心 | 我要投稿 吉安站长网 (https://www.0796zz.com.cn/)- 科技、图像处理、媒体智能、办公协同、操作系统!
当前位置: 首页 > 站长资讯 > 传媒 > 正文

提高物联网可视性和设备安全性的5种工具

发布时间:2021-01-30 19:18:42 所属栏目:传媒 来源:互联网
导读:PS:第四种可以而第五种不可以的原因是 Spring在创建Bean时默认会根据自然排序进行创建,所以A会先于B进行创建。 8.2 循环依赖通俗说 Spring通过三级缓存解决了循环依赖。 一级缓存 : MapString,Object singletonObjects,单例池,用于保存实例化、注入、初

PS:第四种可以而第五种不可以的原因是 Spring在创建Bean时默认会根据自然排序进行创建,所以A会先于B进行创建。

8.2 循环依赖通俗说

Spring通过三级缓存解决了循环依赖。

一级缓存 : Map<String,Object> singletonObjects,单例池,用于保存实例化、注入、初始化完成的bean实例

二级缓存 : Map<String,Object> earlySingletonObjects,早期曝光对象,用于保存实例化完成的bean实例

三级缓存 : Map<String,ObjectFactory<?>> singletonFactories,早期曝光对象工厂,用于保存bean创建工厂,以便于后面扩展有机会创建代理对象。

当A、B两个类发生循环引用时,在A完成实例化后,就使用实例化后的对象去创建一个对象工厂,并添加到三级缓存中,如果A被AOP代理,那么通过这个工厂获取到的就是A代理后的对象,如果A没有被AOP代理,那么这个工厂获取到的就是A实例化的对象。当A进行属性注入时,会去创建B,同时B又依赖了A,所以创建B的同时又会去调用getBean(a)来获取需要的依赖,此时的getBean(a)会从缓存中获取:

  • 第一步,先获取到三级缓存中的工厂。
  • 第二步,调用对象工工厂的getObject方法来获取到对应的对象,得到这个对象后将其注入到B中。紧接着B会走完它的生命周期流程,包括初始化、后置处理器等。

当B创建完后,会将B再注入到A中,此时A再完成它的整个生命周期。至此循环依赖结束!

8.2 三级缓存意义何在?
 

核心组件:

  • zookeeper:解决分布式状态调度的,允许多node节点之间协同工作
  • manager: 运行时推送同步配置到node节点
  • node: 内嵌canal,负责binlog订阅,并把事件同步到目标数据库;同时,将同步状态反馈到manager上

6.4 改造适配

1)控制台api封装

由于otter-admin的技术栈比较旧,采用webx框架实现,没有前后端分离。

因此,需要根据已有代码,重新封装独立的rpc接口,然后才能对接到DTS服务中,包装相关otter-admin的接口,实现产品化的前台接口逻辑。

2)云原生改造

改造为k8s部署,支持快速扩缩容,具体可以参考我上一篇文章 拥抱云原生,如何将开源项目用k8s部署?

(编辑:吉安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读