Spring 为什么自动布线在以下情况下不起作用:

Spring 为什么自动布线在以下情况下不起作用:,spring,Spring,我有以下几类: @component public class Car extends abstract Vehicle { public Car() { super(10); } } public abstract class Vehicle { @Autowired private Validator em; public Vehicle(int i) { // init } public int getVehicle()

我有以下几类:

@component
public class Car extends abstract Vehicle {

  public Car() {
    super(10);
  }

}


public abstract class Vehicle {

   @Autowired
   private Validator em;

   public Vehicle(int i) {
     // init
   }

  public int getVehicle() {
  }
}
当我使用以下方法创建bean时:

applicationContext.getAutowireCapableBeanFactory().createBean(..)
它失败,出现一个异常,声明无法插入验证程序bean

但是,如果我将自动布线更改为setter injection,它的工作原理如下:

public abstract class Vehicle {


   private Validator em;

   public Vehicle(int i) {
     // init
   }

   public int getVehicle() {
   }

   @Autowired
   public set Em(Validator em) {
     this.em = em;
   }
}


有人能给我解释一下吗,这与bena生命周期的工作方式有关吗?

Spring允许抽象类中的
@Autowiring
,所以我在这里看不到任何问题。如果你把注释放在setter上,我怀疑你和
验证程序
类有某种循环依赖关系,所以这就是为什么你必须把注释放在setter上。

不,我没有循环依赖关系。。由于valdiator是一个基本类,没有自动布线..只是一个组件。。。我有点不明白为什么。。我所能想到的是,可能是豆子生命周期造成了一些问题。。。逐步完成代码。。我可以看到,当调用构造函数时,验证器为null…这是唯一注入它的地方?非常奇怪。你能帮我做一下堆栈跟踪吗?
公共类车扩展抽象车
这个语法不正确。摆脱
抽象
。你一定在
验证程序
或其他地方做了一些奇怪的事情,因为我刚刚尝试了你发布的代码和一个空的
验证程序
类,它工作得很好。