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

北京城乡建设部网站首页北京网站里面发消息怎么做超链接

北京城乡建设部网站首页北京,网站里面发消息怎么做超链接,天津建设工程信息往,wordpress开源小程序1 什么是Bean的循环依赖 A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你#xff0c;你也依赖我。 比如#xff1a;丈夫类Husband#xff0c;妻子类Wife。Husband中有Wife的引用。Wife中有Husband的引用。 2 singleton下的set注入产生的循环依赖 丈夫类 pac…1 什么是Bean的循环依赖 A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你你也依赖我。 比如丈夫类Husband妻子类Wife。Husband中有Wife的引用。Wife中有Husband的引用。 2 singleton下的set注入产生的循环依赖 丈夫类 package com.powernode.spring6.bean; /*** 丈夫类*/ public class Husband {private String name;private Wife wife;public void setName(String name) {this.name name;}public void setWife(Wife wife) {this.wife wife;}public String getName() {return name;}Overridepublic String toString() {return Husband{ name name \ , wife wife.getName() };} }妻子类 package com.powernode.spring6.bean; /*** 妻子类*/ public class Wife {private String name;private Husband husband;public void setName(String name) {this.name name;}public void setHusband(Husband husband) {this.husband husband;}public String getName() {return name;}Overridepublic String toString() {return Wife{ name name \ , husband husband.getName() };} }?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd!--singleton setter 模式下的循环依赖 没有问题--bean idhusbandBean classcom.powernode.spring6.bean.Husband scopesingletonproperty namename value张三/property namewife refwifeBean//beanbean idwifeBean classcom.powernode.spring6.bean.Wife scopesingletonproperty namename value李四/property namehusband refhusbandBean//bean /beanspackage com.powernode.spring6.test;import com.powernode.spring6.bean.Husband; import com.powernode.spring6.bean.Wife; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;public class CircularDependencyTest {Testpublic void testCD(){ApplicationContext applicationContext new ClassPathXmlApplicationContext(spring.xml);Husband husbandBean applicationContext.getBean(husbandBean, Husband.class);System.out.println(husbandBean);Wife wifeBean applicationContext.getBean(wifeBean, Wife.class);System.out.println(wifeBean);} }singleton setter 模式下的循环依赖 没有问题 singleton表示在整个Spring容器当中是单例的独一无二的对象 在singleton setter模式下为什么循环依赖不会出现问题Spring是如何应对的 主要的原因是在这种模式下Spring对Bean的管理主要分为清晰的两个阶段 第一个阶段在Spring容器加载的时候实例化Bean只要其中任意一个Bean实例化之后马上进行 “曝光”【不等属性赋值就曝光】 第二个阶段Bean“曝光”之后再进行属性的赋值(调用set方法。)。 核心解决方案是实例化对象和对象的属性赋值分为两个阶段来完成的。 注意只有在scope是singleton的情况下Bean才会采取提前“曝光”的措施。 3 prototype下的set注入产生的循环依赖 在prototype setter模式下的循环依赖存在问题会出现异常 BeanCurrentlyInCreationException 当前的Bean正在处于创建中异常。。。 注意当两个bean的scope都是prototype的时候才会出现异常。如果其中任意一个是singleton的就不会出现异常。 4 singleton下的构造注入产生的循环依赖 和上面测试结果相同都是提示产生了循环依赖并且Spring是无法解决这种循环依赖的。 为什么呢 主要原因是因为通过构造方法注入导致的因为构造方法注入会导致实例化对象的过程和对象属性赋值的过程没有分离开必须在一起完成导致的。 5 Spring解决循环依赖的机理 Spring为什么可以解决set singleton模式下循环依赖 根本的原因在于这种方式可以做到将“实例化Bean”和“给Bean属性赋值”这两个动作分开去完成。 实例化Bean的时候调用无参数构造方法来完成。此时可以先不给属性赋值可以提前将该Bean对象“曝光”给外界。 给Bean属性赋值的时候调用setter方法来完成。 两个步骤是完全可以分离开去完成的并且这两步不要求在同一个时间点上完成。 也就是说Bean都是单例的我们可以先把所有的单例Bean实例化出来放到一个集合当中我们可以称之为缓存所有的单例Bean全部实例化完成之后以后我们再慢慢的调用setter方法给属性赋值。这样就解决了循环依赖的问题。 在Spring框架底层源码级别上是如何实现的呢 DefaultSingletonBeanRegistry类中包含三个重要的属性 private final MapString, Object singletonObjects. 单例对象的缓存key存储bean名称value存储Bean对象【一级缓存】 一级缓存存储的是单例Bean对象。完整的单例Bean对象也就是说这个缓存中的Bean对象的属性都已经赋值了。是一个完整的Bean对象。private final MapString, Object earlySingletonObjects. 早期单例对象的缓存key存储bean名称value存储早期的Bean对象【二级缓存】 二级缓存存储的是早期的单例Bean对象。这个缓存中的单例Bean对象的属性没有赋值。只是一个早期的实例对象。private final MapString, ObjectFactory? singletonFactories . 单例工厂缓存key存储bean名称value存储该Bean对应的ObjectFactory对象【三级缓存】 三级缓存存储的是单例工厂对象。这个里面存储了大量的“工厂对象”每一个单例Bean对象都会对应一个单例工厂对象。 这个集合中存储的是创建该单例对象时对应的那个单例工厂对象。 这三个缓存其实本质上是三个Map集合。 在该类中有这样一个方法addSingletonFactory()这个方法的作用是将创建Bean对象的ObjectFactory对象提前曝光。 再分析下面的源码 从源码中可以看到spring会先从一级缓存中获取Bean如果获取不到则从二级缓存中获取Bean如果二级缓存还是获取不到则从三级缓存中获取之前曝光的ObjectFactory对象通过ObjectFactory对象获取Bean实例这样就解决了循环依赖的问题。 总结 Spring只能解决setter方法注入的单例bean之间的循环依赖。ClassA依赖ClassBClassB又依赖ClassA形成依赖闭环。Spring在创建ClassA对象后不需要等给属性赋值直接将其曝光到bean缓存当中。在解析ClassA的属性时又发现依赖于ClassB再次去获取ClassB当解析ClassB的属性时又发现需要ClassA的属性但此时的ClassA已经被提前曝光加入了正在创建的bean的缓存中则无需创建新的的ClassA的实例直接从缓存中获取即可。从而解决循环依赖问题。
http://www.w-s-a.com/news/729755/

相关文章:

  • 单位网站建设收费标准网上开店铺需要多少钱
  • 灯饰网站需要这么做申请域名的流程
  • 软件下载网站怎么赚钱wordpress减少数据库查询
  • 什么兼职网站可以做视频剪辑常见的推广平台有哪些
  • 网站开发是用html还是jsp设迹官网
  • 查公司信息的网站怎么学wordpress
  • 白银做网站长春一般建一个网站需要多少钱
  • 帮人做钓鱼网站的人网络推广培训职业学校
  • 淘宝客有必须做网站吗网站开发的形式有( )
  • 网站建设:上海珍岛网页版qq空间登录
  • 网站服务器ipteahouse wordpress主题
  • 深州市住房保障和城乡建设局网站做网站公司叫什么
  • 织梦网站转跳手机站注册公司代理记账费用
  • wordpress建站Pdf亚马逊aws在线观看
  • 做网站的外包公司有哪些WordPress调用json数据
  • 做网站网站怎么赚钱网站的建设及维护报告
  • 可以做效果图的网站东莞网站优化什么方法
  • 网站和软件的区别怎么做招生网站
  • 雄安免费网站建设电话如何做网站推广 求指点
  • 十大免费cad网站入口软件北京做网站建设价格
  • 建设一个公司网站要具备什么网页制作的专业
  • 东莞seo建站排名全包网站
  • 网站建设的基本步骤有哪些软件商店下载官方
  • 网站建设开发报告论文hao123上网从这里开始官方
  • 阿里云建网站费用徐州房产网
  • 网站统计分析平台做企业礼品的网站
  • 做可视化图表的网站wordpress批量导入tag
  • txt怎么做网站网站的链接结构包括
  • 适合平面设计师的网站网络营销专员的就业前景
  • 好订单网服装加工接单谷歌seo网站推广怎么做