前言:
由于java的多态特性,往往一个接口有多种具体的实现,传统的做法是在一个实现类中新建不同方法。但这种做法既不符合OOP的思想,而且当每种实现逻辑都相对复杂的时候,会让我们的代码显得臃肿和凌乱,当我们只需要使用其中一种实现的时候,没有必要去关心其他实现,所以正确的做法应该是各自封装各自一体。
当我们在spring中使用多个实现类实现同一个接口的时候,那么问题来了,我们怎么选择我们需要的实现。
一、通过依赖注入使用
1、@Autowired注解+@Qualifier注解
@Autowired按类型查找,找到多个会报错,如果没有指定required=false且找不到实现类的话也会报错。
用例:
public class UserController {
@Autowired
@Qualifier(value = "userServiceA")
private UserService userService;
public void execute() {
userService.doSomething();
}
}
@Autowired源码:
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RU