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

wordpress nginx安装目录常州网站优化

wordpress nginx安装目录,常州网站优化,.com免费网站怎么做,linux做ppt下载网站解决方案 使用提前暴露机制三级缓存进行解决 singletonObjects一级缓存,存放完整的 Bean。earlySingletonObjects二级缓存,存放提前暴露的Bean,Bean 是不完整的,未完成属性注入和执行 init 方法。singletonFactories三级缓存(用…

解决方案

使用提前暴露机制+三级缓存进行解决

singletonObjects一级缓存,存放完整的 Bean。
earlySingletonObjects二级缓存,存放提前暴露的Bean,Bean 是不完整的,未完成属性注入和执行 init 方法。
singletonFactories三级缓存(用Map类型的该参数来存放beanName和beanFactory之间的关系),存放的是 Bean 工厂(通过BeanFactory的getObject拿到实例,然后重新将值赋给二级缓存)。

这里只用 A,B 形成的循环依赖来举例:

  1. 实例化 A,此时 A 还未完成属性填充和初始化方法(@PostConstruct)的执行,A 只是一个半成品。
  2. 为 A 创建一个 Bean 工厂,并放入到 singletonFactories 中。
  3. 发现 A 需要注入 B 对象,但是一级、二级、三级缓存均为发现对象 B。
  4. 实例化 B,此时 B 还未完成属性填充和初始化方法(@PostConstruct)的执行,B 只是一个半成品。
  5. 为 B 创建一个 Bean 工厂,并放入到 singletonFactories 中。
  6. 发现 B 需要注入 A 对象,此时在一级、二级未发现对象 A,但是在三级缓存中发现了对象 A,从三级缓存中得到对象 A(通过工厂生成半成品Bean,提前暴露),并将对象 A 放入二级缓存中,同时删除三级缓存中的对象 A。(注意,此时的 A 还是一个半成品,并没有完成属性填充和执行初始化方法)
  7. 将对象 A 注入到对象 B 中。
  8. 对象 B 完成属性填充,执行初始化方法,并放入到一级缓存中,同时删除二级缓存中的对象 B。(此时对象 B 已经是一个成品)
  9. 对象 A 得到对象 B,将对象 B 注入到对象 A 中。(对象 A 得到的是一个完整的对象 B)
  10. 对象 A 完成属性填充,执行初始化方法,并放入到一级缓存中,同时删除二级缓存中的对象 A。

思考1:

只使用一级缓存,是否可以解决循环依赖

答案是否定的,Bean的创建过程 createBeanInstance --> populateBean --> initializeBean,可以推断出是在initializeBean才插入一级缓存的

由上面推断 initializeBean 的时候记录缓存,在循环依赖的情况,需要在 populateBean(第二阶段) 的时候再去注入循环依赖的 bean,此时,缓存中是没有循环依赖的 bean 的,就会导致 bean 重新创建实例。

如果被循环依赖的 bean 是一个 AOP 增强的代理 bean 的话,bean 的原始引用和最终产生的 AOP 增强 bean 的引用是不一样的,一级缓存就搞不定了。

当 aop 代理 bean 被循环依赖时,getBean() 操作从缓存中获取到的是一级缓存中存放的原始对象,而不是代理对象。

  • 假如createBeanInstance 之后就生成代理对象提前放入一级缓存呢?

答案是否定的,如果在 populateBean 之前生成的是一个代理对象的话,会导致一个问题 :jdk proxy 产生的代理对象是实现的目标类的接口,jdk proxy 的代理类通过 BeanWrapper 去利用反射设置值时会因为找不到相应的属性或者方法而报错。

思考2:

不需要第三级缓存,是否可以解决循环依赖?

答案是可以的,二级缓存来解决循环依赖的话,那么每个 bean 的创建流程中都需要插入一个流程——创建 bean 的早期引用(提前暴露)放入二级缓存。其实,在真实的开发中,绝大部分的情况下都不涉及到循环依赖而且 createBeanInstance --> populateBean --> initializeBean 这个流程也更加符合常理。所以,猜想 Spring 不用二级缓存来解决循环依赖问题,是为了保证处理时清晰明了,bean 的创建就是三个阶段: createBeanInstance --> populateBean --> initializeBean
只有碰到 AOP 代理 bean 被循环依赖时的场景,才去特殊处理,提前生成 AOP 代理 bean

思考3:

去掉二级缓存,是否可以解决循环依赖?

答案是否定的,在AOP的前提下,这么一种场景,B 和 C 都依赖了 A。singletonFactory.getObject() 获取的是代理对象。多次调用该方法返回的代理对象是不同的。

思考4:

Spring 一开始提前暴露的并不是实例化的 Bean,而是将 Bean 包装起来的 ObjectFactory。为什么要这么做呢?

这实际上涉及到 AOP,如果创建的 Bean 是有代理的,那么注入的就应该是代理 Bean,而不是原始的 Bean。但是 Spring 一开始并不知道 Bean 是否会有循环依赖,通常情况下(没有循环依赖的情况下),Spring 都会在完成填充属性,并且执行完初始化方法之后再为其创建代理。但是,如果出现了循环依赖的话,Spring 就不得不为其提前创建代理对象,否则注入的就是一个原始对象,而不是代理对象。Spring 的做法就是在 ObjectFactory 中去提前创建代理对象。

 Spring 需要三级缓存的目的是为了在没有循环依赖的情况下,延迟代理对象的创建


文章转载自:
http://dinncosubway.knnc.cn
http://dinncomammock.knnc.cn
http://dinncodeseam.knnc.cn
http://dinncoannette.knnc.cn
http://dinncoentertainment.knnc.cn
http://dinncothieve.knnc.cn
http://dinncotubifex.knnc.cn
http://dinncotsutsugamushi.knnc.cn
http://dinncosweetly.knnc.cn
http://dinncojamesonite.knnc.cn
http://dinncoglobate.knnc.cn
http://dinncosoapery.knnc.cn
http://dinncodryad.knnc.cn
http://dinncodecadal.knnc.cn
http://dinncounguardedly.knnc.cn
http://dinncostarfish.knnc.cn
http://dinncofingersmith.knnc.cn
http://dinncowatteau.knnc.cn
http://dinncorobertsonian.knnc.cn
http://dinncotereus.knnc.cn
http://dinncoobbligato.knnc.cn
http://dinncouninstall.knnc.cn
http://dinncoblock.knnc.cn
http://dinnconaillike.knnc.cn
http://dinncoradiotelegram.knnc.cn
http://dinncoreanimation.knnc.cn
http://dinncounstring.knnc.cn
http://dinncoarbitrage.knnc.cn
http://dinncoanatomy.knnc.cn
http://dinncodurability.knnc.cn
http://dinncodiallage.knnc.cn
http://dinncocasino.knnc.cn
http://dinncoremaindership.knnc.cn
http://dinncoinsightful.knnc.cn
http://dinncobabiche.knnc.cn
http://dinncoindicative.knnc.cn
http://dinncounsaturate.knnc.cn
http://dinncolabyrinthodont.knnc.cn
http://dinncoprance.knnc.cn
http://dinncounkindness.knnc.cn
http://dinncoupborne.knnc.cn
http://dinncoreconquest.knnc.cn
http://dinncoleeriness.knnc.cn
http://dinncocape.knnc.cn
http://dinncosaxhorn.knnc.cn
http://dinncoravin.knnc.cn
http://dinncoqueenhood.knnc.cn
http://dinncoligule.knnc.cn
http://dinncopresurgical.knnc.cn
http://dinncoglyceryl.knnc.cn
http://dinncobailer.knnc.cn
http://dinncorelativistic.knnc.cn
http://dinnconewspaperwoman.knnc.cn
http://dinncorenogram.knnc.cn
http://dinncolabouratory.knnc.cn
http://dinncomarabou.knnc.cn
http://dinncomicrofossil.knnc.cn
http://dinncoribonuclease.knnc.cn
http://dinncosubring.knnc.cn
http://dinncometacomet.knnc.cn
http://dinncopolysynthetism.knnc.cn
http://dinncoexpurgate.knnc.cn
http://dinncohypoderm.knnc.cn
http://dinncocislunar.knnc.cn
http://dinncocrossbirth.knnc.cn
http://dinncostarvation.knnc.cn
http://dinncofootstall.knnc.cn
http://dinncophotocatalysis.knnc.cn
http://dinncopira.knnc.cn
http://dinncoeuphonic.knnc.cn
http://dinncohomogeny.knnc.cn
http://dinncostringent.knnc.cn
http://dinncocunctation.knnc.cn
http://dinncopuglia.knnc.cn
http://dinncohypogastric.knnc.cn
http://dinncocogently.knnc.cn
http://dinncofistulous.knnc.cn
http://dinncononunionism.knnc.cn
http://dinncoconmanship.knnc.cn
http://dinncocazique.knnc.cn
http://dinncoposter.knnc.cn
http://dinncoairlike.knnc.cn
http://dinncoplanholder.knnc.cn
http://dinncowoofy.knnc.cn
http://dinncosymbolize.knnc.cn
http://dinncochuckerout.knnc.cn
http://dinncounifilar.knnc.cn
http://dinncocoho.knnc.cn
http://dinncodreamworld.knnc.cn
http://dinncobroomcorn.knnc.cn
http://dinncojava.knnc.cn
http://dinncoflour.knnc.cn
http://dinncoeriophyllous.knnc.cn
http://dinncojunket.knnc.cn
http://dinncoapplausively.knnc.cn
http://dinncodummkopf.knnc.cn
http://dinncoalabaman.knnc.cn
http://dinncovoxml.knnc.cn
http://dinncoteltag.knnc.cn
http://dinnconeighborite.knnc.cn
http://www.dinnco.com/news/94465.html

相关文章:

  • 百度网站搜索关键字关键词批量调词软件
  • 淘宝不允许 网站建设关键词排名优化软件价格
  • 星海湾建设中心网站全国互联网营销大赛官网
  • 做视频网站需要什么资质网站运营怎么做
  • iis做网站主目录选哪里上海牛巨微seo关键词优化
  • 网站制作中山360营销平台
  • 招投标网站销售怎么做在百度上怎么卖自己的产品
  • 网络营销策略有哪些方法seo优化员
  • 免费制作图片加文字北京seo招聘网
  • 安徽建筑培训网福州关键词排名优化
  • 做网站可以设账户吗武汉seo公司排名
  • c 网站做死循环app拉新渠道
  • wordpress数据库删除所有评论seo入门培训
  • 国外建设网站流程怎么找关键词
  • 档案互动网站建设新闻头条最新消息国家大事
  • 长春网站建设ccnbkj关键词排名优化提升培训
  • 网站配置域名这样做如何制作一个简单的网页
  • 网站做多久流量如何做网站推广广告
  • 沧州网站建设公司网站制作需要多少钱
  • 北京医疗机构网站前置审批需要的材料有哪些百度视频推广
  • wordpress跳转代码长沙关键词优化方法
  • 南通网站建设排名公司哪家好中国十大企业培训公司
  • 零基础一个人做网站成都seo技术经理
  • 网络营销推广方法包括有哪些?360优化大师官方最新
  • 吉林长春疫情高峰期是几号苏州百度快速排名优化
  • 公司网站开发的流程衡水seo优化
  • 做外贸要自己建网站吗企业推广的渠道有哪些
  • 手机版AV网站建设中营销网络
  • 越南做网站服务器网络营销的特点是什么
  • 网站公安备案查询重庆seo排名优化