1. 程式人生 > >一個介面多個實現類的Spring注入方式(註解方式)

一個介面多個實現類的Spring注入方式(註解方式)

轉載: https://blog.csdn.net/niceLiuSir/article/details/80499821

1. 首先, Interface1 介面有兩個實現類 Interface1Impl1 和 Interface1Impl2

Interface1 介面:

package com.example.service;

/**
 * Created by liuzh on 2018-05-29.
 * 介面1
 */
public interface Interface1 {
    void fun1();
}

以下是介面的兩個實現類,請注意@service註解的使用方式,這裡給每個實現類標註了不同的名稱,方便在@Resource注入時區別注入

Interface1 介面實現類1:

package com.example.service.impl;

import com.example.service.Interface1;
import org.springframework.stereotype.Service;

/**
 * Created by liuzh on 2018-05-29.
 */
@Service("s1")
public class Interface1Impl1 implements Interface1 {
    @Override
    public void fun1() {
        System.out.println("介面1實現類 ...");
    }

    public void fun2(){
        System.out.println("介面1實現類1 fun2 ...");
    }
}

Interface1 介面實現類2:

package com.example.service.impl;

import com.example.service.Interface1;
import org.springframework.stereotype.Service;

/**
 * Created by liuzh on 2018-05-29.
 */
@Service("s2")
public class Interface1Impl2 implements Interface1 {
    @Override
    public void fun1() {
        System.out.println("介面1實現類 ...");
    }

    public void fun2(){
        System.out.println("介面1實現類2 fun2 ...");
    }
}

2. 通過 @Autowired 和 @Qualifier 配合注入

@Autowired
@Qualifier("interface1Impl1")
Interface1 interface1;    //正常啟動

3. 使用@Resource注入,根據預設類名區分

@Resource(name = "interface1Impl1")
Interface1 interface1;    //正常啟動

4. 使用@Resource注入,根據@Service指定的名稱區分

@Resource(name = "s1")
Interface1 interface1;    //正常啟動

使用@Resource注入,根據@Service指定的名稱區分,可以避免多個實現類在不同包下,但是類名相同的情況。