3

我的问题已经在以下链接中提出。

Spring:为什么我们自动装配接口而不是实现的类?

我想知道我们是否使用@Qualifier注入 bean 而不是自动装配接口的目的是什么?为什么我们不自动连接相同的实现类?

通过自动装配接口,我们希望利用运行时多态性,但如果我们遵循@Qualifier. 请给我一个标准的方法。

如果我在没有弹簧的情况下这样做,以下是简单的代码。我想知道 spring 将如何注入 PrepaidPaymentService 实例和 PostPaidPaymentService 实例?

 public interface PaymentService{
        public void processPayment();
    }



public class PrepaidPaymentService implements PaymentService{

    public void processPayment(){

        System.out.println("Its Prepaid Payment Service");

    }
}


public class PostPaidPaymentService implements PaymentService{

    public void processPayment(){

         System.out.println("Its Postpaid Payment Service");

    }
}


public class Test {


    public PaymentService service;

    public static void main(String[] args) {

        Test test = new Test();


        int i = 1;
        if(i ==1 ){
            test.setService(new PrepaidPaymentService());
            test.service.processPayment();
        }
        i = 2;
        if(i == 2){
            test.setService(new PostPaidPaymentService()); 
            test.service.processPayment();
        }


    }


    public void setService(PaymentService service){
        this.service = service;
    }

}
4

2 回答 2

0

除了 mthmulders 所说的之外,以下情况也适用 -

当仅存在一种实现时,按类型自动装配有效。如果你有多个实现,那么 Spring 需要知道选择哪一个。@Qualifier 允许您定义在这种情况下选择哪一个。

于 2013-04-18T08:10:19.687 回答
0

一个原因是通过自动装配接口(即使使用 a @Qualifier),您可以注入不同的实现来进行测试。

例如,如果您有一个使用 DAO 访问数据库的服务,您可能希望替换该 DAO 以便对该服务进行单元测试。

于 2013-04-18T07:59:42.193 回答