首页 > 解决方案 > 自动装配接口与类

问题描述

如果一个接口有多个实现,那么我将不得不使用@Qualifier 来指示我想要自动装配哪个类。直接自动装配类而不是接口不是更有意义吗?

标签: springautowired

解决方案


这就是面向对象编程(尤其是抽象和多态)的意义所在。

您构建独立于具体实现的类并使用接口。

这使您可以随时更改使用的实现。

假设你有这个:


public interface I{
    void doSomething();
}

@Component("a")
public class A implements I{
    public void doSomething(){
        //...
    }
    public void doSomethingElse(){
        //...
    }
}
@Component("b")
public class B implements I{
    public void doSomething(){
        //...
    }
}

如果你使用

@Autowired
private A yourVariable;

您可能很想使用doSomethingElse()作为实现细节的方法(无论出于何种原因)。

但是,如果您使用

@Qualifier("a")
private I yourVariable;

这不可能发生,因为接口中不存在该方法。

这使您能够随时交换实现。


推荐阅读