我能否确定 SomeInterfaceAdvancedImpl 类中的委托(delegate)字段(请参阅下面的代码)始终是 SomeInterfaceBasicImpl 类型。 我刚刚检查了调试器中的类型并且它有效,但我怀疑它是否会始终以相同的方式工作。谁能解释一下这个现象(为什么会这样)?
public interface SomeInterface {
long doSomething(String param);
}
public abstract class SomeInterfaceAbstractImpl implements SomeInterface {
public abstract long doSomething();
}
@Component
class SomeInterfaceBasicImpl extends SomeInterfaceAbstractImpl {
@Override
public long doSomething(String param) {
return 1;
};
}
@Primary
@Component
class SomeInterfaceAdvancedImpl extends SomeInterfaceAbstractImpl {
@Autowired
SomeInterface delegate;
@Override
public long doSomething(String param) {
if (param == "2") {
return 2;
} else {
return delegate.doSomething(param);
}
};
}
最佳答案
添加一些 SomeInterface
的其他实现,您将看到由 NoSuchBeanDefinitionException
引起的 Spring 错误。在这种情况下,您需要使用 @Qualifier
注释来告诉 Spring 使用哪个 bean。
查看此 link在 mkyong.com 上可以更好地理解。
关于java - 在实现相同接口(interface)的组件中使用@Autowired 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25793344/