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

微信公众号搭建微网站微信小程序开发工具下载官网

微信公众号搭建微网站,微信小程序开发工具下载官网,下载百度语音导航地图安装,新乡个人网站建设不知道最近有没有被一道Java面试题刷爆朋友圈#xff0c;Spring框架的循环依赖如何解决。我收到了不少粉丝的提问#xff0c;在了解到之后#xff0c;也去网上查询了一些资料#xff0c;自己也询问了身边的同事#xff0c;总结出以下几个方面#xff0c;今天就和我来看一…不知道最近有没有被一道Java面试题刷爆朋友圈Spring框架的循环依赖如何解决。我收到了不少粉丝的提问在了解到之后也去网上查询了一些资料自己也询问了身边的同事总结出以下几个方面今天就和我来看一看吧~寻常情况下如果问Spring内部怎么去解决循环的依赖性一定是单默认的单例Bean中属性互相引用的场景。假设几个Bean之间的互相引用甚至循环依赖自己。根据上面的两个图我们先说一下循环依赖与原型的场景是不互相支持的通常会走到AbstractBeanFactory类中下面的判断然后反馈回异常问题。if (isPrototypeCurrentlyInCreation(beanName)) { throw new BeanCurrentlyInCreationException(beanName); } 原因其实并不难如果要创建一个新的A就会发现需要注入原型字段B当创建新的原型字段B时又发现需要新的A。这就很尴尬了禁止套娃总不能靠猜去判断先是StackOverflow还是OutOfMemory这也太难了吧~所以Spring怕你猜起来困难就非常贴心的出现了BeanCurrentlyInCreationException。真不愧是我最爱的框架。在基于在构造器上的循环依赖这就不必再多说了官方文档有很明显的指示想让构造器注入去支持循环依赖这就不可能了改代码吧······那么默认单例的属性注入场景那么Spring对循环依赖是如何支持的呢Spring解决循环依赖这时候我们就不得不说到Spring的内部了它内部维护了三个Map这是什么就是我们常说的三个缓存级别。这是为了让更好理解其实并没有官方名字坐实这个三级缓存的概念。不过这不重要接着看就是了。在Spring的DefaultSingletonBeanRegistry类中你就会发现它的上面有三个Map1.singletonObjects。这个或许是我们最熟悉的部分了我们通常叫它单例池容器它其实就是缓存创建完成单例Bean的地方。2.singletonFactories。用来映射创建Bean的原始工厂。3.earlySingletonObjects。它用来映射Bean的早期引用这意思就是Map里的Bean并不完整与其称之为Bean倒不说它只是一个Instance.再往后的两个Map就更像是一个“垫脚石”了创建Bean时用了一下用完就清理了。循环依赖的本质了解本质之后才能知道如何解决刚才说了Spring如何处理循环依赖首先我们跳出“阅读源码”的思维举个例子如果让你实现下面的功能你会如何去做1.将指定的一些类实例为单例2.类中的字段同样实例为单例3.必须支持循环依赖假设类A是存在的那么public class A { private B b; } // 类B public class B { private A a; } 看到了吗其实就是让你模仿一下Spring假设A和B被修饰而且类之间的字段假设是通过Autowired修饰然后放到Map里面经过处理之后再放到Map里面。其实上述并不是“Spring如何去解决循环依赖”而是循环依赖的基本本质其实在网上可以搜索到很多例子完全可以去百度一下看一看这可以让你不在阅读的泥潭里陷得太深进而忽略了问题本质如果实在是看不懂逆推Spring的实现原因效果会好很多。问题的本质竟然在于two sum说到这里有没有觉得似曾相识?好像在什么时候见过似的没错和two sum的解题是很相似的。什么你不知道two sumtwo sum是刷题网站leetcode序号为1的题也就是大多人的算法入门的第一题。经常有梗对于这个two sum感兴趣的可以去看看。咳咳跑题了我们再回来问题的内容是先给你规定数组再给定一个数字。再返回到数组里面允许通过相加得到指定数字的两个索引。我们举个例子给定nums [2, 7, 11, 15], target 9 那么要返回 [0, 1]因为2 7 9这道题的优解是一次遍历HashMapclass Solution { public int[] twoSum(int[] nums, int target) { MapInteger, Integer map new HashMap(); for (int i 0; i nums.length; i) { int complement target - nums[i]; if (map.containsKey(complement)) { return new int[] { map.get(complement), i }; } map.put(nums[i], i); } throw new IllegalArgumentException(No two sum solution); } } 这个时候就需要先去Map中寻找我们需要的数字如果没有那么就将数字先保存到Map里面再寻找到需要的数字时一起返回即可。
http://www.pierceye.com/news/812314/

相关文章:

  • 网页制作与网站建设自考西安千秋网络科技有限公司
  • 建设网站的费用入什么科目永久免费google搜索引擎
  • 拍卖网站怎么做梧州网页设计师招聘
  • 炫酷网站源码下载网站建设副业
  • 做dw和ps的网站教学做网站属于什么费用
  • 秦皇岛网站制作小程序开发wordpress调用分类标签
  • 网站绑定别名好吗台州品牌网站设计
  • 安徽省住房和城乡建设厅网站域名东莞松山湖华为小镇
  • 购物网站开发教程中文版做一个自己的免费网站吗
  • 网站建设网络推广平台湖北省级建设主管部门网站
  • 手机网站建设口碑好google海外版
  • 网站加视频播放设计怎么做的oa系统管理平台
  • 湛江有网站的公司名称秘密入口3秒自动进入
  • 网站建设需要租用什么北京网站设计制作过程
  • 设计高端网站建设电子商务平台的建设步骤
  • 对外网站ipv6建设方案模板网站提交地址
  • 网站优化包括哪些内容哪一个网站做专栏作家好点
  • 网站外包 博客网络广告的优势有哪些
  • 福建网站建设网wordpress批量替换标签
  • 网站建设 海外房产商标注册证查询
  • 门户网站建设要求易申建设网站
  • 现在创业什么行业最好seo全网营销公司
  • 网站 域名 授权服务器 分布式网站模板英文
  • wordpress 二维码插件搜索引擎优化的方法
  • 国外申请域名的网站CC wordpress 攻击
  • 能发外链的网站中国机械加工网加热炉节能
  • 个人网站推广 公司网站地址栏小图标
  • 网站 如何 备案营销型网站建设便宜
  • 从网上怎么做网站营销做算命类网站违法吗?
  • 口碑好的网站开发公司哪家最专业网站优化关键词是怎么做的