一个接口有多个实现类,如何实现调用某一个实现类

例如:interface接口有两个实现类InterfaceImpl1和InterfaceImpl2

1
2
3
4
InterfaceImpl1

@Service
public class InterfaceImpl1 implements Interface{}
1
2
3
4
InterfaceImpl2

@Service
public class InterfaceImpl2 implements Interface{}

方法一:指定实现类的优先级,注入的时候使用优先级高的实现类

1
2
3
4
5
InterfaceImpl2

@Service
@Primary //同一个接口的实现类,最多只有有一个添加该注解
public class InterfaceImpl2 implements Interface{}

在controller中注入接口,默认使用的是Primary标注的实现类的方法

方法二:@Autowired和@Qualifier配合注入

1
2
3
@Autowired
@Qualifier("InterfaceImpl1")
Interface interface;

方法三:使用@Resource注入,根据默认类名区分

1
2
@Resource("InterfaceImpl1")
Interface interface;

方法四:使用@Resource注入,根据@Service指定的名称区分

1
2
3
4
5
@Service("s1")
public class InterfaceImpl1 implements Interface{}

@Resource("s1")
Interface interface;