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…这是唯一注入它的地方?非常奇怪。你能帮我做一下堆栈跟踪吗?公共类车扩展抽象车
这个语法不正确。摆脱抽象。你一定在验证程序
或其他地方做了一些奇怪的事情,因为我刚刚尝试了你发布的代码和一个空的验证程序
类,它工作得很好。