Spring
的自动注解方式-@AutoWired
往往在暴露服务的时候只会将接口暴露出去,具体的实现逻辑需要隐藏,这部分就涉及到接口的实例化,平时我们都是用Spring boot 中的@AutoWired
实现的,但是当我们出现两个接口的实现类时怎么制定对应的实现类呢?
只有一个实现类
当只有一个实现类的时候,我们并不需要做显示的制定,Spring Boot会自动帮我们找到实现类;
例如我们的接口是:
public interface IUser {
User getUser();
}
然后我们的实现类是:
@Service
public class UserImplA implements IUser {
public User getUser() {
return new User("AAAA",11);
}
}
当我们进行调用的时候只需要直接@AutoWired
就行!
@RestController
public class RestApi {
@Autowired
IUser iUser;
@RequestMapping(value = "/get")
public User get(){
return iUser.getUser();
}
}
当有多个实现类
第一种就是使用@Primary
使用
@Primary
注解的类会被优先实例化
@Service
@Primary
public class UserImplB implements IUser {
public User getUser() {
return new User("BBBB",11);
}
}
第二种是使用@Qualifier
在加载接口的时候使用
使用@Qualifier
注入指定Bean的时候,若没有指明Bean的名称,则其默认名称是首字母小写的类名。
@RestController
public class RestApi {
@Autowired
@Qualifier("userImplA")
IUser iUser;
@RequestMapping(value = "/get")
public User get(){
return iUser.getUser();
}
}
第三种指定@Service
的名称
@Service("userA")
public class UserImplA implements IUser {
public User getUser() {
return new User("AAAA",11);
}
}