首页 > 技术文章 > 一个接口多个实现类的spring注入方式

yq-cc 2019-08-08 11:09 原文

接口 ITestServer有两个实现类TestImpl1,TestImpl2

ITestServer接口

public interface ITestServer {
     void showClassName();
}

TestImpl1实现类

@Service("TestImpl1")
public class TestImpl1 implements ITestServer {

    @Override
    public void showClassName() {
        System.out.println("test1");
    }
}

  

TestImpl2实现类

@Service("TestImpl2")
public class TestImpl2 implements ITestServer {
    @Override
    public void showClassName() {
        System.out.println("test2");
    }
}

  

测试类如下

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestImpl2Test {
     @Autowired
     @Qualifier("testImpl2")
     ITestServer iTestServer;

    @Test
     public void test(){
         iTestServer.showClassName();
     }


}

  

注入方式分析

    1.当不在@service后面给定bean名字的时候,通过 @Autowired 和 @Qualifier 配合注入

     @Autowired

     @Qualifier("testImpl1")   //次处注意不给定bean名字的时候,spring默认把当前类首字母转小写后做为bean的名字

 

    2.使用@Resource注入,根据默认类名区分

    @Resource(name = "testImpl1")

 

    3.使用@Resource注入,根据@Service指定的名称区分

    @Resource(name = "TestImpl1") //这里使用的是自定义的名字

 

推荐阅读