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

临淄信息港安徽全网优化

临淄信息港,安徽全网优化,美食烹饪网站策划书,个人网页样式目录 1、什么是Spring的循环依赖#xff1f; 2、如何避免循环依赖问题#xff1f; 3、Spring的三级缓存 小结 1、什么是Spring的循环依赖#xff1f; Spring框架中的循环依赖问题是指两个或多个bean之间相互依赖#xff0c;形成闭环#xff0c;导致无法完成实例化的问…目录 1、什么是Spring的循环依赖 2、如何避免循环依赖问题 3、Spring的三级缓存 小结 1、什么是Spring的循环依赖 Spring框架中的循环依赖问题是指两个或多个bean之间相互依赖形成闭环导致无法完成实例化的问题。简单来说就是A依赖于B而B又依赖于A形成了一个循环的依赖链。 循环依赖问题可能导致应用程序启动失败或者产生不可预期的行为。这是因为当Spring容器创建Bean时会使用默认的构造函数或Setter方法将依赖注入到Bean中。如果存在循环依赖那么容器无法确定先创建哪个Bean从而导致无法完成依赖注入。 ⭐扩展Bean的创建过程 图片来源深谈Spring如何解决Bean的循环依赖 在Spring中循环依赖主要分为两种类型构造器的循环依赖和field属性的循环依赖。 2、如何避免循环依赖问题 首先需要明确的一点是Spring 并不能解决所有循环依赖的问题。Spring提供了以下几种解决循环依赖问题的方式 1. 构造器注入Spring容器在创建bean时会先创建所有没有依赖关系的bean然后再创建有依赖关系的bean。在创建有依赖关系的bean时Spring会先创建构造器参数中所需要的bean然后再创建当前bean。使用构造函数注入代替Setter方法注入可以确保在创建Bean时所有的依赖都已经提供这种方式可以解决大部分的循环依赖问题。 2. 使用setter方法注入依赖在这种情况下Spring容器可以在实例化bean后通过调用setter方法来注入所需的依赖。 3. 使用Lazy注解Lazy注解可以延迟加载bean的实例化。通过将Bean设置为延迟加载当需要使用该bean时才会进行实例化。这种方式可以解决部分的循环依赖问题。 4. 使用Autowired注解搭配Qualifier注解明确指定依赖关系。通过使用Qualifier注解可以明确指定依赖的Bean名称从而帮助Spring容器正确解析循环依赖。 5. 使用PostConstruct注解和InitializingBean接口。这两种方式可以在Bean创建完成后执行特定的初始化操作可以在初始化方法中处理循环依赖的情况。 6. 使用代理在这种情况下可以使用AOP代理来实现bean之间的依赖关系。这样就可以在编译时就解决循环依赖问题。 图片来源https://www.cnblogs.com/mghio/p/15024461.html 3、Spring的三级缓存 在Spring中Bean的创建过程中涉及到三级缓存三级缓存是在Spring 4.x之前的版本中使用的机制 singletonObjects这是一级缓存用于存储完全初始化并准备好的单例Bean实例。这些Bean实例是最终被返回的单例Bean实例。在缓存中Bean的名字和Bean实例是以键值对的形式存在的。当Bean的依赖注入完成并且初始化后它会被放置在这个缓存中。 earlySingletonObjects这是二级缓存用于存放已经创建但还未完成初始化的单例Bean实例。这些Bean实例通常是因为依赖其他Bean实例而无法完成初始化处于不完整状态。在Bean的初始化过程中如果发现循环依赖则会将尚未完全初始化的Bean放置在这个缓存中以便解决循环依赖问题。 singletonFactories这是三级缓存用于存储用于创建单例Bean的ObjectFactory工厂对象这些工厂对象可以用来创建单例Bean实例。当Spring正在创建一个Bean时如果发现了循环依赖则会将该Bean的创建工厂放置在这个缓存中在需要时可以通过该工厂来获取Bean的实例。 图片来源Spring 的循环依赖问题 - mghio - 博客园 当两个相互依赖的Bean需要被实例化时Spring会先查看第一级缓存中是否已经有完整的Bean实例。如果有就使用已有的实例如果没有则进入第二级缓存查看是否有已经创建但未初始化的Bean实例。如果有就使用这个未初始化的Bean实例去初始化另一个Bean然后再将这个未初始化的Bean实例存入第一级缓存如果没有则进入第三级缓存查看是否有可以用来创建Bean实例的工厂对象。如果有就使用这个工厂对象去创建Bean实例然后再将这个新创建的Bean实例存入第一级缓存如果没有则直接创建新的Bean实例存入第一级缓存。 通过三级缓存机制Spring可以在循环依赖的情况下正确地初始化每个Bean避免了出现错误或异常。同时三级缓存也有效地减少了不必要的重复初始化操作提高了应用程序的性能。 这三级缓存的使用可以帮助Spring容器在处理循环依赖时能够正确地获取到Bean的实例并最终完成整个Bean的创建和初始化过程。在Spring 5.x及更新的版本中已经不再使用三级缓存而是采用了更加高效和可靠的解决方案来处理循环依赖的问题。 小结 需要注意的是尽管Spring提供了一些机制来解决循环依赖问题但是最好的做法仍然是尽量减少组件之间的相互依赖尽量保持低耦合的设计从而避免出现循环依赖的情况。良好的设计和架构能够减少循环依赖的发生提高应用程序的可维护性和可测试性。 参考 Spring 的循环依赖问题 - mghio - 博客园 深谈Spring如何解决Bean的循环依赖 今天一定要搞清楚Spring如何解决循环依赖 Spring 循环依赖解决方案_spring解决循环依赖-CSDN博客
http://www.yutouwan.com/news/396825/

相关文章:

  • 做商城网站的公司推荐网站地址ip域名查询
  • 邢台市路桥建设总公司网站营销网站建设规划方案
  • 红色文化网站建设专业做网站上海
  • 农村建设自己的网站浏览器网址
  • 综合电商平台有哪些南宁seo网站建设费用
  • 免费行情网站app大全餐饮业网络营销方式
  • 龙华做网站开发公司会计科目设置
  • 忆达城市建设游戏网站8图片这样的网站怎么做的
  • 石狮网站建设制作广州搜索排名优化
  • 不用登录的小游戏网站太原广告公司网站建设
  • 热门课程自己做网站引流推广广告怎么写
  • 大连网站关键字优化网站开发都是用什么做的
  • wordpress个人网站主题wordpress类似于知更鸟的中文主题
  • 电商网站设计目的一个只做百合的网站
  • 网站后台如何设计怎么自己制作网站免费
  • 纯php网站wordpress浏览人数在哪里改
  • 个人网站做打赏流程网站主题模板下载安装
  • 海南省住房和城乡建设厅网站seo排名方案
  • 做夏促的网站有哪些百度统计网站速度诊断工具
  • 网站开发基础知识试题江苏 做网站
  • 2019做网站图片用什么格式邯郸seo排名
  • 重庆建筑特种作业查询网长沙优化官网公司
  • 怎样用手机搭建网站公司网站建设维护管理办法
  • 河北网站建设企业有什么好看的网站
  • 下列哪一项不属于电子商务网站建设推广有奖励的app平台
  • 网站方案编写seo网站培训班
  • 美食网站 怎么做滨州网站建设
  • 肇庆网站建设遵义市建设局网站
  • 网站开发薪资删除wordpress网页无用
  • 石家庄专业制作网站个人网站能不能做论坛