一个接口多个实现类的spring注入方式

接口 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") //这里使用的是自定义的名字

 

posted @ 2019-08-08 11:09  YQ_CC  阅读(3131)  评论(0)    收藏  举报