Spring Boot学习笔记二:自动注解方式-@AutoWired

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);
    }
}

你可能感兴趣的:(Spring Boot学习笔记二:自动注解方式-@AutoWired)