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>() {}

 

转载于:https://www.cnblogs.com/yanxiaoge/p/11481611.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值