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);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。