Springboot注入Bean的注解:@Autowired与@Resource与@Reference注解的区别

1.Spring自动装配byName和byType区别。

byNamebyName会搜索整个配置文件中的bean,如果有相同名称的bean则自动配置,否则显示异常
byTypebyType会搜索整个配置文件中的bean,如果有相同类型的bean则自动装配,否则显示异常。

2. @Autowired

@Autowired按byType自动注入,是有Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired。

2.1 @Autowired装配属性

在Web MVC中控制层(Controller)访问的是业务层(Service),而业务层(Service)访问的是数据层(Dao),使用@Autowired注解实现注入。

@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。byType注入:

public class TestServiceImpl {
    @Autowired
    private UserDao userDao; // 用于字段上
}

如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。如下:

public class TestServiceImpl {
    @Autowired
    @Qualifier("userDao")
    private UserDao userDao; 
}

3. @Resource

@Resource默认按byName自动注入,是由J2EE提供的注解,需要导入包javax.annotation.Resource。

3.1 @Resource装配属性

@Resource有两个重要的属性name和type:
1.如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。
2.如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。
3.如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。
4.如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

public class TestServiceImpl {
    // 下面两种@Resource只要使用一种即可
    @Resource(name="userDao")
    private UserDao userDao; // 用于字段上
    
    @Resource(name="userDao")
    public void setUserDao(UserDao userDao) { // 用于属性的setter方法上
        this.userDao = userDao;
    }
}

 @Resource与@Autowired区别

1、@Autowired注解是按类型装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它required属性为false。

2、@Resource注解和@Autowired一样,也可以标注在字段或属性的setter方法上,但它默认按名称装配。

名称可以通过@Resource的name属性指定,如果没有指定name属性,当注解标注在字段上,即默认取字段的名称作为bean名称寻找依赖对象,当注解标注在属性的setter方法上,即默认取属性名作为bean名称寻找依赖对象。

3、@Resources按名字,是JDK的,@Autowired按类型,是Spring的

4.@Autowired:先byType再byName ,@Resource:先byName再byType(当指定@Resource name属性时,只会byName)

4. @Reference

@Service dubbo提供者服务用于声明对外暴露服务,与@Reference配合使用。

@Reference 用于dubbo消费者服务指明引用哪个提供者接口服务。在微服务中,工程项目会分成很多模块(Maven工程),每个模块相当于一个服务,一个服务调用另一个服务的功能需要使用@Reference注解。它可以定义在类中的一个字段上,也可以定义在一个方法上,甚至可以用来修饰另一个 annotation,表示一个服务的引用。通常 @Reference 定义在一个字段上。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值