zoukankan      html  css  js  c++  java
  • spring循环依赖解决

    循环依赖的发生:

      循环依赖发生类似于java中的线程死锁,A实例化需要依赖B,B实例化需要依赖A,如此陷入依赖循环,就出现了循环依赖。

    解决思路:

      A实例化的时候由于需要依赖B,A此时处于无法实例化状态(B此时没有实例化,无法依赖),所以可以将半实例化的A做一个伪实例化声明(Spring中的第三级缓存),那么B实例化的时候,就可以找到需要依赖的A(虽然是假的,但是可以让B继续往下走),这样B可以顺利实例化完成,之后A再实例化就发现B可以正常依赖了,A也可以继续实例化了。这样就解决了循环依赖问题。

    Spring的解决方式:

    使用@lazy注解,加了lazy的原理如下:

    • A的创建: A a=new A();
    • 属性注入:发现需要B,查询字段b的所有注解,发现有@lazy注解,那么就不直接创建B了,而是使用动态代理创建一个代理类B
    • 此时A跟B就不是相互依赖了,变成了A依赖一个代理类B1,B依赖A
  • 相关阅读:
    F查询和Q查询
    Django ORM 常用字段和参数
    Django的路由系统
    Django模板系统
    Django中的视图(view)
    Django应用app创建及ORM
    TP90,TP99,TP999,MAX含义
    TDD、BDD、ATDD、DDD 软件驱动开发模式比较
    liunx 安装chrome的方法
    nginx 反向代理mysql
  • 原文地址:https://www.cnblogs.com/smallVampire/p/13273269.html
Copyright © 2011-2022 走看看