我在项目中遇到了一个循环依赖的小问题,发现@Autowired在字段/设置器上使用可以解决这个问题,而不是@Autowired在构造函数上使用。这种行为的结论是 Spring 在 field/setter 注入的情况下注入代理,在构造函数注入的情况下注入实际的 bean。
问题:这背后的原因是什么?为什么要注入不同的实体?
考虑简单的片段:
@Component
public static class A{
@Autowired B b;
@Autowired C c;
}
@Component
public static class B{
@Autowired B b;
@Autowired C c;
// public B(C c,B b) { // this would cause circular dep problem
// this.c=c;
// }
}
@Component
public static class C{
@Autowired A a;
@Autowired B b;
}
我想到的一个想法是,通过构造函数注入,您可以立即使用注入的实体,因此作为预防措施,初始化的 bean 被注入而不是代理,但另一方面,我可以在 setter 的情况下做同样的事情方法,使接缝无效。
慕斯709654
相关分类