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

门户app网站建设多少钱网站建设初验申请表

门户app网站建设多少钱,网站建设初验申请表,如何给网站建设提意见,网站投资设计什么是循环依赖 // A依赖了B class A {public B b; } ​ // B依赖了A class B {public A a; } ​ // 循环依赖 A a new A(); B b new B(); a.b b; b.a a; 对象之间的相互依赖很正常#xff0c;但是在Spring中由于对象创建要经过Bean的生命周期#xff0c;所以就有了循环…什么是循环依赖 // A依赖了B class A {public B b; } ​ // B依赖了A class B {public A a; } ​ // 循环依赖 A a new A(); B b new B(); a.b b; b.a a; 对象之间的相互依赖很正常但是在Spring中由于对象创建要经过Bean的生命周期所以就有了循环依赖问题 Bean的生命周期 在Spring中被Spring管理的对象叫做Bean那么Bean是如何生成的 1、Spring扫描class得到BeanDefinition放在一个Map里 2、根据得到的BeanDefinition去生成Bean 3、首先根据class推断构造方法 4、根据推断出来的构造方法反射得到一个对象 5、填充原始对象中的属性依赖注入 6、如果原始对象中的某个方法被AOP了那么则需要根据原始对象生成一个代理对象 7、把最终生成的代理对象放入单例池中下次getBean直接从单例池拿即可 这里只列举出大致流程还有Aware回调、初始化等 出现循环依赖的流程简述 ABean创建--依赖了B属性--触发BBean创建---B依赖了A属性---需要ABean但ABean还在 创建过程中 在Spring中就是通过三级缓存机制解决的循环依赖问题 三级缓存 一级缓存为singletonObjects二级缓存为earlySingletonObjects三级缓存为singletonFactories 三个缓存的作用 singletonObjects中缓存的是已经经历了完整生命周期的bean对象。 earlySingletonObjects比singletonObjects多了一个early表示缓存的是早期的bean对象。也就是Bean的生命周期还没走完就把这个Bean放入了earlySingletonObjects。 singletonFactories中缓存的是ObjectFactory表示对象工厂表示用来创建早期bean对象的工厂。 循环依赖问题A创建时---需要B----B去创建---需要A从而产生了循环 打破循环依赖可以加个中间人缓存 一个缓存就能解决循环依赖了那么为什么Spring中还需要singletonFactories呢 如果A的原始对象注入给B的属性之后A的原始对象进行了AOP产生了一个代理对象此时对于A而言它的Bean对象其实应该是AOP之后的代理对象而B的a属性对应的并不是AOP之后的代理对象这就产生了冲突。B依赖的A和最终的A不是同一个对象。 现在Spring所用的singletonFactories为了调和不同的情况在singletonFactories中存的是lambda表达式这样的话只有在出现了循环依赖的情况才会执行lambda表达式才会进行AOP也就说只有在出现了循环依赖的情况下才会打破Bean生命周期的设计如果一个Bean没有出现循环依赖那么它还是遵守了Bean的生命周期的设计的。 singletonFactories中存的是某个beanName对应的ObjectFactory在bean的生命周期中生成完原始对象之后就会构造一个ObjectFactory存入singletonFactories中。这个ObjectFactory是一个函数式接口所以支持Lambda表达式() - getEarlyBeanReference(beanName, mbd, bean) protected Object getEarlyBeanReference(String beanName, RootBeanDefinition mbd, Object bean) {Object exposedObject bean;if (!mbd.isSynthetic() hasInstantiationAwareBeanPostProcessors()) {for (BeanPostProcessor bp : getBeanPostProcessors()) {if (bp instanceof SmartInstantiationAwareBeanPostProcessor) {SmartInstantiationAwareBeanPostProcessor ibp (SmartInstantiationAwareBeanPostProcessor) bp;exposedObject ibp.getEarlyBeanReference(exposedObject, beanName);}}}return exposedObject; } ​ // InstantiationAwareBeanPostProcessorAdapter Override public Object getEarlyBeanReference(Object bean, String beanName) throws BeansException {return bean; } ​ // AbstractAutoProxyCreatorAnnotationAwareAspectJAutoProxyCreator的父类进行AOP用到 Override public Object getEarlyBeanReference(Object bean, String beanName) {Object cacheKey getCacheKey(bean.getClass(), beanName);this.earlyProxyReferences.put(cacheKey, bean);return wrapIfNecessary(bean, beanName, cacheKey); } 总结 1、singletonObjects缓存经过了完整生命周期的bean 2、earlySingletonObjects缓存未经过完整生命周期的bean如果某个bean出现了循环依赖就会提前把这个暂时未经过完整生命周期的bean放入earlySingletonObjects中这个bean如果要经过AOP那么就会把代理对象放入earlySingletonObjects中否则就是把原始对象放入earlySingletonObjects 3、singletonFactories缓存的是一个ObjectFactory也就是一个Lambda表达式。在每个Bean的生成过程中经过实例化得到一个原始对象后都会提前基于原始对象暴露一个Lambda表达式并保存到三级缓存中这个Lambda表达式可能用到也可能用不到如果当前Bean没有出现循环依赖那么这个Lambda表达式没用当前bean按照自己的生命周期正常执行执行完后直接把当前bean放入singletonObjects中如果当前bean在依赖注入时发现出现了循环依赖则从三级缓存中拿到Lambda表达式并执行Lambda表达式得到一个对象并把得到的对象放入二级缓存。 4、还有一个缓存就是earlyProxyReferences用来记录某个原始对象是否进行过AOP了。在AbstractAutoProxyCreator的postProcessAfterInitialization方法中会去判断当前beanName是否在earlyProxyReferences如果在则表示已经提前进行过AOP了无需再次进行AOP。 思考为什么需要singletonFactories假设没有singletonFactories只有earlySingletonObjects会怎样
http://www.pierceye.com/news/34046/

相关文章:

  • 什么网站可以做音乐伴奏wordpress大主题公园
  • 用python做网站不常见山东美建站
  • wordpress4.9邮件发送宁波seo搜索平台推广专业
  • 网站建设开发费怎么做账网络营销与直播电商主要学什么
  • 在线阅读小说网站怎么做室内设计动态效果图制作
  • 企业网站推广工具做网站 所需资源
  • 网站开发团队公司模式印章在线制作
  • 医院网站推广渠道长沙招聘
  • 网站如何微信支付常州模板网站建设咨询
  • 网站建设需要基础吗apsx做的网站怎么发布
  • 为拟建设的网站申请一个域名优购网
  • 深圳建设网站价格如何让做的网站自动适应浏览器
  • 宝安附近做网站公司简单免费制作手机网站
  • 建设网站挂广告赚钱wordpress图片延迟加载插件
  • 怎么看小企业网站建设网站策划与运营
  • 免费源码资源源码站go网站优化外包多少钱
  • wordpress阿里云全站加速国家企业信息信用信息系统查询
  • 龙华做网站的网络工程师一个月工资多少
  • 找人做网站没有做好报案有用吗南京淄博网站建设方案
  • 万网虚拟主机两个网站乌兰察布做网站的公司
  • 江宁住房和城乡建设局网站做微网站常用软件
  • 绵阳网站网站建设成crm网
  • 如何做网站的注册页面营销型网站郑州
  • 女装品牌排行榜前十名怎样优化网站案例
  • 海淀做网站设计的公司ps网页素材
  • 网站开发进度计划是什么施工单位招聘信息
  • 汉化主题做网站效果图代做网页设计作业价格
  • 湖州站内优化seo公司网页代码模板
  • 北京时代 网站建设杭州网页设计招聘网
  • 可口可乐网站建设策划方案全国企业信息系统网官网