java - 在实现相同接口(interface)的组件中使用@Autowired 字段

标签 java spring dependency-injection autowired

我能否确定 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/

相关文章:

java - Spring 启动 + JPA : @Transactional annotation : Roll back is not working

java - 如何在 Spring Boot 中管理无限进程?

java - 身份验证请求失败 : Bad credentials [LDAP: error code 49 - data 52e, v1db1]

design-patterns - 通过构造函数或在类方法级别注入(inject)依赖项?

angularjs - 保持 $inject 同步是什么意思?

java - 在Java中构建链表

java - 关闭 AutoCompleteTextView 下拉列表

java - Axis2 和 Web 服务 : File Upload

java - 访问 Java 泛型函数中的具体属性

android - Roboguice 2.0 将应用程序注入(inject) POJO