当前位置: 首页 > 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://wiki.neutronadmin.com/news/396825/

相关文章:

  • 做网站必须要切图吗推广运营是什么工作
  • 网站开发需要多少钱新闻大同网站建设制作哪家好
  • 厦门网站设计定制哈尔滨网络科技公司哪家好
  • 小题狂做 官方网站杂志制作 wordpress主题
  • 外贸西班牙语网站建设网站建设服务公司案例
  • 做暧暧视频网站作品展示的网站
  • 好看的网站链接最新域名解析网站
  • 携程网站联盟学销售去哪个学校最好
  • 北京网站案例公司画册模板
  • 简单的企业网站网站备案ip查询
  • 专业做视频的网站有哪些内容义乌公司做网站
  • 中山市哪家公司做网站百度推广登录地址
  • 网站怎么做防盗凡科网站怎么设计
  • 手机网站建站费用抖音代运营公司有哪些
  • 网站运维是做什么的怎样给自己的网站做优化
  • 深圳建设网站制作阿里云建设wordpress
  • div使用太多影响网站收录企业信息系统的功能和特点
  • 广州最专业的网站建设海安县城乡建设局网站
  • 海口网站开发软件网站建设
  • 猪八戒做网站自己建设网站模版
  • 基金会网站建设方案无法打开建行网站
  • 东莞网站建设+旅游专业建站公司品牌
  • 杭州市建设信用网官网seo网站快排
  • 建筑网站建设科技公司网站制作模板
  • 成华区响应式网站建设免费word模板下载哪个网站
  • 建站行业如何快速成第一单网站建设公众号开
  • 莱州网站建设教程页面模板的图文封面
  • 成都企业建站系统广州市城乡和建设局网站首页
  • 运营公开网是什么网站wordpress主题什么意思
  • 深圳外贸网站建设哪家好网站首次备案