做网站字体一般设置,动漫建模代做网站百度一下,在百度上做网站推广效果怎么样,专业的网络公司介绍项目场景#xff1a;
提示#xff1a;这里简述项目相关背景#xff1a;
例如#xff1a;项目场景#xff1a;示例:通过蓝牙芯片(HC-05)与手机 APP 通信#xff0c;每隔 5s 传输一批传感器数据(不是很大) 问题描述 我们都知道#xff0c;如果在代码中#xff0c;将两个…项目场景
提示这里简述项目相关背景
例如项目场景示例:通过蓝牙芯片(HC-05)与手机 APP 通信每隔 5s 传输一批传感器数据(不是很大) 问题描述 我们都知道如果在代码中将两个或多个 Bean 互相之间持有对方的引用就会发生循环依赖。循环的依赖将会导致注入死循环这是 Spring 发生循环依赖的原因。 循环依赖有三种形态 第一种互相依赖A 依赖 BB 又依赖 A它们之间形成了循环依赖。 第二种三者间依赖A 依赖 BB 依赖 CC 又依赖 A形成了循环依赖。 第三种自我依赖A 依赖 A 形成了循环依赖。 问题解决 Spring 中设计了三级缓存来解决循环依赖问题当我们去调用 getBean()方法的时候Spring 会先从一级缓存中去找到目标 Bean如果发现一级缓存中没有便会去二级缓存中去找而如果一、二级缓存中都没有找到意味着该目标 Bean 还没有实例化。 于是Spring 容器会实例化目标 BeanPS刚初始化的 Bean 称为早期 Bean 。然 后将目标 Bean 放入到二级缓存中同时加上标记是否存在循环依赖。如果不存在循环依赖便会将目标 Bean 存入到二级缓存否则便会标记该 Bean 存在循环依赖 然后将等待下一次轮询赋值也就是解析Autowired 注解。等Autowired 注解赋值完成后PS完成赋值的 Bean 称为成熟 Bean 会将目标 Bean 存入到一级缓存。 这里可以做个总结我们来看这张图。Spring 一级缓存中存放所有的成熟 Bean 二级缓存中存放所有的早期 Bean先取一级缓存再去二级缓存。 问题扩展 那么前面有提到三级缓存三级缓存的作用是什么 回答三级缓存是用来存储代理 Bean当调用 getBean()方法时发现目标 Bean 需要通过代理工厂来创建此时会将创建好的实例保存到三级缓存最终也会将赋值好的 Bean 同步到一级缓存中。 Spring 中哪些情况下不能解决循环依赖问题 1、多例 Bean 通过 setter 注入的情况不能解决循环依赖问题 2、构造器注入的 Bean 的情况不能解决循环依赖问题 3、单例的代理 Bean 通过 Setter 注入的情况不能解决循环依赖问题 4、设置了DependsOn 的 Bean 的情况不能解决循环依赖问题