我可以确定类SomeInterfaceAdvancedImpl中的委托字段(请参阅下面的代码)将始终是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);
}
};
}
答案 0 :(得分:1)
添加SomeInterface
的其他一些实现,您将看到由NoSuchBeanDefinitionException
引起的Spring错误。在这种情况下,您需要使用@Qualifier
注释来告诉Spring使用哪个bean。
在mkyong.com上查看此link以获得更好的理解。