zoukankan      html  css  js  c++  java
  • spring----Bean的生命周期和循环依赖

    循环依赖:

      A类引用了B,B类引用了A,像这种循环着依赖就是循环依赖;

    对于这种配置不会报错

        <bean id="instanceA" class="com.zy.entities.InstanceA">
            <property name="instanceB" ref="instanceB"></property>
        </bean>
        <bean id="instanceB" class="com.zy.entities.InstanceB">
            <property name="instanceA" ref="instanceA"></property>
        </bean>
    

    对于这种配置会报错(Error creating bean with name 'instanceA': Requested bean is currently in creation: Is there an unresolvable circular reference?)

    <bean id="instanceA" class="com.zy.entities.InstanceA">
            <constructor-arg name="instanceB" ref="instanceB"></constructor-arg>
    </bean>
    <bean id="instanceB" class="com.zy.entities.InstanceB">
            <constructor-arg name="instanceA" ref="instanceA"></constructor-arg>
    </bean>
    

      

    在了解生命周期

    doGet()方法:

    1、解析别名

    final String beanName = transformedBeanName(name);
    

    2、从单例缓冲池中获取对象(第一次获取不到)

    Object sharedInstance = getSingleton(beanName);
    

    3、判断如果需要创建的bean是原型(非单例),就会抛出异常;

    4、判断当前容器是否有父工厂,(有由父工厂加载)

    5、合并bean定义(如果类似下面的这种配置,就需要合并bean定义)

    <bean id="xx" class="com.zy.entities.InstanceB" abstract="true"></bean>
        <bean id="xx2" class="com.zy.entities.InstanceA" parent="xx"></bean>
    

    代码

    final RootBeanDefinition mbd = getMergedLocalBeanDefinition(beanName);

    6、调用dependson依赖检查(比如下面这种配置就会报错)

        @DependsOn("InstanceB")
        @Bean
        public InstanceA instanceA(){
            return new InstanceA();
        }
    
        @DependsOn("InstanceA")
        @Bean
        public InstanceB instanceB(){
            return new InstanceB();
        }
    

    6、创建实例,如果是单例,调用

    getSingleton(beanName, new ObjectFactory<Object>() {}
    
  • 相关阅读:
    xcode调试技巧
    iOS应用崩溃日志揭秘(二)
    iOS应用崩溃日志揭秘(一)
    排序算法
    Java中的Reference
    windows环境中mysql数据库重置root用户密码
    了解浮点数的编码形式
    读《深入理解计算机系统》Chapter1
    枚举学习
    Charles抓包工具在mac上配置
  • 原文地址:https://www.cnblogs.com/yanxiaoge/p/11481611.html
Copyright © 2011-2022 走看看