当前位置: 首页 > 网络应用技术

清酒弹簧循环依赖性

时间:2023-03-07 23:00:08 网络应用技术

  大家好,我是一个

  最近,采访我非常烦躁,尤其是当我看到一些面试官时,我有一张黑色的脸,我真的很想赶紧采访。

  但是对于一生,我仍然必须忍受。最终分析,它仍然太蔬菜了!

  最近,一些粉丝问了周期依赖的问题,一些人将来要求您将这种“悬挂”他“悬挂”。

  多个豆子相互依赖于形成一个封闭环。例如:a取决于b,b取决于A。

  一般而言,如果您询问如何在弹簧容器中求解周期依赖项,则必须参考默认单身bean中默认单打bean中注入的属性的场景。

  是否可以如下解决周期依赖性的类型:

  构造循环依赖性是否是设置器循环依赖性是原型的圆形依赖性。

  异常信息:BEAN当前创建一个例外

  现在A和B彼此面对。A说B被放在首位,B说A放在第一个。只是不要射击。

  嘿,只是玩!

  我相信每个人都在电视连续剧中看到了这个场景,最后,“恶棍死了很多。”

  但是,当我们回到我们身边时,我们不希望有人死,也就是说,我们必须两者都会创建两者。我应该怎么办?

  解决方案是:必须首先妥协一个人。

  Ases说:我退后一步,我先删除了杂志,然后把枪放下了。

  Yi听到一听到,他就被泪水放下。

  乍一看,他没有殴打自己,他也哭了起来。两人紧紧地拥抱了对方。

  从那以后,我过着幸福快乐的生活...

  回到我们,首先回顾生命周期:

  简要了解上述过程

  仅仅是分配中间分配的过程,可以使用该实例吗?

  当然不是!

  换句话说,只有实例化的豆是半生产的产品。它只是初始化后的成品。

  现在A依靠B,B取决于A。

  A对B说:我希望你完成

  b也是A:我希望您完整

  好的,两人战斗并面对枪支。如何处理?您必须独自妥协。

  一个说:算了,你给我一个半生产的产品,我会。

  B在他的心中想到,他用我的半生产产品创建了一个完整的A,然后我可以创建它。

  我内心深处思考,我很快同意:好的,没问题。

  通过这种方式,A创建了一个完整的自我,并且B还通过A完成了创作。

  问题解决了。

  它真的解决了吗?成品和半生产产品在哪里存在?

  这必须提及著名的三级缓存。

  Spring提供了三个级别的缓存来存储成品产品和半生产产品和工厂。

  如果您是面试,建议您获得简单的版本,您可以处理面试

  有时间等待源代码版本

  如果A取决于B,B取决于A,则这两个类别形成A周期依赖性

  建议使用弹簧源代码食用源代码版本。

  1.当我们致电getBean()获取bean时,实际呼叫是dogetBean()method.dogetbean()想要获取beana,所以请致电getsingleton()方法从高速缓存beana中找到beana

  2.在getingleton()方法中,从“第一个级别的缓存”中查找它。不,返回null

  3.在dogetBean()方法中将BeanA作为null,因此请使用相应的处理逻辑,并调用getsingleton()的重载方法

  4.在getingleton()方法中,首先将beana_name添加到一个集合中,该集合用于标记创建中bean的createBean方法,然后返回匿名的内部类CreateBean方法。

  5.输入AbstractautowirecapabeanFactory#docreatebean,首先反映调用构造函数以创建BeanA实例,然后确定它是否是一个示例,是否允许它预先暴露(是否是为单个示例),(也就是说,无论是在第一个排名中的第一个步骤中,判断都是正确的,同时将Beana添加到“三级高速缓存”中

  6.将Beana的属性填充。此时

  7.调用DogetBean()方法。像上面的BeanA过程一样,检查缓存中的BeanB,然后如果没有。

  8.目前,BeanB取决于Beana,呼叫getingleton()获取Beana,从第一个,第二和第三封存中找到它,此时从“三级高速缓存”中获取Beana的Creation Factory.to SingletonObject。,此时,此单词对象指向上面的docreatebean()方法中的实例化beana

  9.以这种方式,BeanB获得了BeanA的依赖性,因此BeanB成功完成了初始化,并将Beana从“三级缓存”移至“次要缓存”

  10.然后Beana继续他的属性填充工作。目前,还获得了BeanB。Beana还完成了创作。返回到getingleton()方法继续执行,将beana从“次要缓存”转移到“一个”到“一个”到“一个”到“一个”到“一个”到一个“ class Cache”