当前位置: 首页 > news >正文

公司查名网站品牌策划公司海报

公司查名网站,品牌策划公司海报,手机网站的页面大小,珠宝出售网站模板Spring 的循环依赖问题是指需要初始化的Bean A需要依赖另一个BeanB但是BeanB 也需要依赖Bean A 导致两个Bean的初始化都无法完成Spring是通过三级缓存机制解决循环依赖问题的其实若是不考虑AOP 二级缓存就完全足够解决这个问题核心思路是 提前暴露没有完全初始化的Bean、即实例…

Spring 的循环依赖问题是指

需要初始化的Bean A需要依赖另一个BeanB

但是BeanB 也需要依赖Bean A 导致两个Bean的初始化都无法完成

Spring是通过三级缓存机制解决循环依赖问题的

其实若是不考虑AOP 二级缓存就完全足够解决这个问题

核心思路是 提前暴露没有完全初始化的Bean、

实例化完BeanA 后就把这个Bean放入二级缓存中

这样初始化BeanB时 就可以到二级缓存中拿到这个初始化了一半的BeanA

这样BeanB就可以完成初始化 BeanA也能完成依赖注入后结束初始化

但是问题的关键是Spring的一大特性便是AOP 

若是Bean A是需要动态代理的Bean  BeanB直接把BaenA 注入肯定是不对的

需要注入代理后的对象

那我们把BeanA代理后的对象放入二级缓存可以吗?

有两方面的原因 导致不能这么做

1.动态代理注入是在Bean初始化完成之后做的,此时A尚未完成初始化,拿不到动态代理类

2.假如能提前拿到A的代理对象 那岂不是A初始化完之后又会重新代理一次? 所以不行

Spring的解决是通过三级缓存

一级缓存:存完全初始化后的对象

二级缓存:存初始化了一半的对象

三级缓存:存初始化对象所用的ObjectFactory,当一级缓存二级缓存都没有需要的Bean时就会把这个Bean的工厂放到三级缓存中

有个疑问是,为什么用ObjectFactory就可以提前获取到动态代理类的对象?又是怎么避免初始化完成后再次代理的呢?

1.ObjectFactory内会判断是否为代理对象,若是代理对象则提前生成代理对象并返回

2.会有代理对象标记,若当前Bean已经被代理过 会被标记 不会二次初始化

获取到代理对象后会放入二级缓存,若此时还有其他Baen也要获取A 则直接返回二级缓存中的对象,不会再次生成代理对象,这也是二级缓存的作用

那为什么用ObjectFactory就没有提前代理的问题呢?

http://www.dtcms.com/a/412866.html

相关文章:

  • 长沙网站建设论坛泉州建设公司
  • 建材企业网站推广关联词有哪些五年级
  • 网站标题没有排名网站建设原型图
  • 建网站需要的设备盘锦网站建设策划
  • 海城市建设局网站wordpress做一个视频网站吗
  • 搭建网站做淘宝客做wordpress模板赚钱
  • 适合用dedecms做的网站毕设做购物网站
  • WordPress去掉网站留言框做网站用jsp还是html
  • 蓝桥杯单片机——按键的多样操作
  • 杭州个人网站建设c2c网站代表有哪些
  • 龙岩做网站开发哪家做的好网网站制作
  • 开平小学学生做平网站莱芜网站建设设计外包
  • 网站建设 服务器主机配置wordpress 4.6.10
  • commons-net
  • 平湖有做网站得吗环球资源网
  • 专题网站开发工具有哪些搭建一个网站
  • 临夏州建设局网站网站建设后期服务收费标准
  • 姑苏网站建设佛山网络推广平台
  • 网站数字签名北京怀柔做网站管理运营的公司
  • 中英文网站建设报价黄页网站建设黄页网站建设
  • tk网站域名注册甘肃精神文明建设网站
  • 万网怎么更改网站名字的知道网站是wp程序做的如何仿站
  • 自己做的网站可以上架烟吗电脑网站安全证书有问题如何解决
  • o2o平台网站开发用html做的美食网站
  • 北京网站建设公司联系方式做外贸 上国外网站
  • 做任务赚取佣金网站网站开发就业培训班
  • 北京建站公司哪家好西安做网站商城的公司
  • Python零基础入门:30分钟掌握核心语法与实战应用
  • vps新建的网站打不开品牌策划公司一般有什么职位
  • 深圳分销网站建设找人建设网站