弹簧循环依赖范围PROTOTYPE

时间:2018-06-01 09:46:52

标签: java spring dependency-injection circular-dependency spring-bean

我创建了以下场景以了解Spring Circular依赖性。

当范围是单身时它很干净。但是当S COPE是PROTOTYPE时会发生冲突。

所以我想知道Spring支持是否避免出现以下情况,或者我们是否应该更改设计。如果是的话请提出一些设计。

考虑下面的例子。

@Service
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class BeanB {

    private BeanA beanA;

    @Autowired
    public void setBeanA(BeanA beanA) {
        this.beanA = beanA;
    }

    public void printBeanB() {
        System.out.println(getBeanName());
    }

    public void printBeanBBeanA() {
        System.out.println(getBeanName() + " - " + beanA.getBeanName());
    }

    public String getBeanName() {
        return "Bean B";
    }
}


@Service
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class BeanA {

    private BeanB beanB;

    @Autowired
    public void setBeanB(BeanB beanB) {
        this.beanB = beanB;
    }

    public void printBeanA() {
        System.out.println(getBeanName());
    }

    public void printBeanABeanB() {
        System.out.println(getBeanName() + " - " + beanB.getBeanName());
    }

    public String getBeanName() {
        return "Bean A";
    }
}

这是一个错误:

  

说明

     

应用程序上下文窗体中某些bean的依赖关系   一个周期:

     

demoApplication(字段私有com.example.demo.beans.BeanA   com.example.demo.DemoApplication.beanA)

Spring支持是否可以避免这种情况,或者我们应该改变设计。如果是的话请提出一些设计。

1 个答案:

答案 0 :(得分:0)

我可以通过使用@Lazy注释解决此问题,如下所示。

> sessionInfo()
R version 3.4.4 (2018-03-15)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows >= 8 x64 (build 9200)