一个二手书网站的建设目标有实力高端网站设计地址

张小明 2026/1/9 23:11:15
一个二手书网站的建设目标,有实力高端网站设计地址,孝感房地产网站建设,深圳百度推广关键词推广什么是Bean的循环依赖 A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你#xff0c;你也依赖我。 比如#xff1a;丈夫类Husband#xff0c;妻子类Wife。Husband中有Wife的引用。Wife中有Husband的引用。package com.powernode.spring6.bean;/*** author 动力节点…什么是Bean的循环依赖A对象中有B属性。B对象中有A属性。这就是循环依赖。我依赖你你也依赖我。比如丈夫类Husband妻子类Wife。Husband中有Wife的引用。Wife中有Husband的引用。packagecom.powernode.spring6.bean;/** * author 动力节点 * version 1.0 * className Husband * since 1.0 **/publicclassHusband{privateStringname;privateWifewife;}packagecom.powernode.spring6.bean;/** * author 动力节点 * version 1.0 * className Wife * since 1.0 **/publicclassWife{privateStringname;privateHusbandhusband;}singleton下的set注入产生的循环依赖我们来编写程序测试一下在singletonsetter的模式下产生的循环依赖Spring是否能够解决packagecom.powernode.spring6.bean;/** * author 动力节点 * version 1.0 * className Husband * since 1.0 **/publicclassHusband{privateStringname;privateWifewife;publicvoidsetName(Stringname){this.namename;}publicStringgetName(){returnname;}publicvoidsetWife(Wifewife){this.wifewife;}// toString()方法重写时需要注意不能直接输出wife输出wife.getName()。要不然会出现递归导致的栈内存溢出错误。OverridepublicStringtoString(){returnHusband{namename\, wifewife.getName()};}}packagecom.powernode.spring6.bean;/** * author 动力节点 * version 1.0 * className Wife * since 1.0 **/publicclassWife{privateStringname;privateHusbandhusband;publicvoidsetName(Stringname){this.namename;}publicStringgetName(){returnname;}publicvoidsetHusband(Husbandhusband){this.husbandhusband;}// toString()方法重写时需要注意不能直接输出husband输出husband.getName()。要不然会出现递归导致的栈内存溢出错误。OverridepublicStringtoString(){returnWife{namename\, husbandhusband.getName()};}}?xml version1.0 encodingUTF-8?beansxmlnshttp://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.xsdbeanidhusbandBeanclasscom.powernode.spring6.bean.Husbandscopesingletonpropertynamenamevalue张三/propertynamewiferefwifeBean//beanbeanidwifeBeanclasscom.powernode.spring6.bean.Wifescopesingletonpropertynamenamevalue小花/propertynamehusbandrefhusbandBean//bean/beanspackagecom.powernode.spring6.test;importcom.powernode.spring6.bean.Husband;importcom.powernode.spring6.bean.Wife;importorg.junit.Test;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;/** * author 动力节点 * version 1.0 * className CircularDependencyTest * since 1.0 **/publicclassCircularDependencyTest{TestpublicvoidtestSingletonAndSet(){ApplicationContextapplicationContextnewClassPathXmlApplicationContext(spring.xml);HusbandhusbandBeanapplicationContext.getBean(husbandBean,Husband.class);WifewifeBeanapplicationContext.getBean(wifeBean,Wife.class);System.out.println(husbandBean);System.out.println(wifeBean);}}通过测试得知在singleton set注入的情况下循环依赖是没有问题的。Spring可以解决这个问题。Spring解决循环依赖的机理Spring为什么可以解决set singleton模式下循环依赖根本的原因在于这种方式可以做到将“实例化Bean”和“给Bean属性赋值”这两个动作分开去完成。实例化Bean的时候调用无参数构造方法来完成。此时可以先不给属性赋值可以提前将该Bean对象“曝光”给外界。给Bean属性赋值的时候调用setter方法来完成。两个步骤是完全可以分离开去完成的并且这两步不要求在同一个时间点上完成。也就是说Bean都是单例的我们可以先把所有的单例Bean实例化出来放到一个集合当中我们可以称之为缓存所有的单例Bean全部实例化完成之后以后我们再慢慢的调用setter方法给属性赋值。这样就解决了循环依赖的问题。那么在Spring框架底层源码级别上是如何实现的呢请看在以上类中包含三个重要的属性**Cache of singleton objects: bean name to bean instance. **单例对象的缓存key存储bean名称value存储Bean对象【一级缓存】**Cache of early singleton objects: bean name to bean instance. **早期单例对象的缓存key存储bean名称value存储早期的Bean对象【二级缓存】**Cache of singleton factories: bean name to ObjectFactory. **单例工厂缓存key存储bean名称value存储该Bean对应的ObjectFactory对象【三级缓存】这三个缓存其实本质上是三个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的实例直接从缓存中获取即可。从而解决循环依赖问题。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做网站创业需要注册公司吗创新的网站建设公司排名

paperxie-AI官网免费论文查重复率AIGC检测/开题报告/文献综述/论文初稿 https://www.paperxie.cn/ai/dissertationhttps://www.paperxie.cn/ai/dissertation 引子:我们为什么害怕写毕业论文? 不是因为懒,也不是因为笨。 而是因为——学术写…

张小明 2026/1/9 7:29:16 网站建设

中国建设银行招标网站一个好的网站建设

当您在使用Microsoft Office时突然弹出"MSCAL.OCX文件缺失"的错误提示,导致日期选择功能无法正常使用时,不必惊慌。本资源提供了完整的MSCAL.OCX下载服务,专为修复Office软件日期控件缺失问题而设计,帮助您快速恢复办公…

张小明 2026/1/9 7:35:45 网站建设

石大远程网页设计与网站建设答案如何规划网站栏目

微调大语言模型是利用特定任务或领域的定制数据集,对预训练模型进行调整;而检索增强生成(RAG)则将检索系统与生成模型相结合,动态地将外部的、最新的知识融入生成结果中。 引言 随着生成式人工智能(Gen A…

张小明 2026/1/9 7:35:56 网站建设

网站建设的脑图规划网站后台管理密码忘了

高速信号完整性设计:从布局到阻抗匹配的实战全解析你有没有遇到过这样的情况?一块PCB板子焊接完成,通电正常,但高速接口就是“抽风”——DDR总线频繁报错、PCIe链路协商失败、千兆以太网丢包严重。示波器一测,眼图几乎…

张小明 2026/1/9 7:36:12 网站建设

网站风格海淀区网站备案去哪

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 使用YUM707的AI辅助功能,自动生成一个Python脚本,实现数据爬取和清洗功能。要求脚本能够从指定网页抓取数据,清洗后存储到CSV文件中。请确保代码…

张小明 2026/1/9 7:36:56 网站建设

网站建设与管理的总结报告沧州 中企动力提供网站建设

10 个MBA论文降重工具,AI写作优化推荐 论文写作的“三座大山”:时间、重复率与疲惫感 MBA学习不仅是知识的积累,更是对个人综合能力的全面考验。而其中,撰写高质量的学术论文,往往是许多MBA学生面临的最大挑战之一。从…

张小明 2026/1/9 7:37:04 网站建设