Springmvc注解@Resource和@Autowired区别对比

Springmvc注解@Resource和@Autowired区别对比Springmvc注解@Resource和@Autowired区别对比

大家好,又见面了,我是你们的朋友全栈君。

@Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。

1、共同点

两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。

2、不同点

(1)@Autowired

@Autowired为Spring提供的注解,需要导入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。

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

@Autowired注解是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,可以设置它的required属性为false。如果我们想使用按照名称(byName)来装配,可以结合@Qualifier注解一起使用。如下:

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

(2)@Resource

@Resource默认按照ByName自动注入,由J2EE提供,需要导入包javax.annotation.Resource。@Resource有两个重要的属性:name和type,而Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定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放在setter方法上,因为这样更符合面向对象的思想,通过set、get去操作属性,而不是直接去操作属性。

@Resource装配顺序:

①如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常。

②如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常。

③如果指定了type,则从上下文中找到类似匹配的唯一bean进行装配,找不到或是找到多个,都会抛出异常。

④如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配。

@Resource的作用相当于@Autowired,只不过@Autowired按照byType自动注入。

原文地址:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105829.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • LMDB使用说明_ldd教程

    LMDB使用说明_ldd教程http://rayz0620.github.io/2015/05/25/lmdb_in_caffe/官方的extract_feature.bin很好用,但是输出的特征是放在LMDB里的。以前嫌LMDB麻烦,一直都图方便直接用ImageDataLayer来读原始图像。这次绕不过去了,就顺便研究了一下Caffe对LMDB的使用,一些心得写下来和大家分享一下。提取特征的内容下一篇再写。

    2022年9月29日
  • 机器学习之数据预处理

    在sklearn之数据分析中总结了数据分析常用方法,接下来对数据预处理进行总结当我们拿到数据集后一般需要进行以下步骤:(1)明确有数据集有多少特征,哪些是连续的,哪些是类别的(2)检查有没有缺失

    2021年12月30日
  • 关于java的JIT知识

    关于java的JIT知识

    2021年12月3日
  • mysql数据库多表查询练习题[通俗易懂]

    mysql数据库多表查询练习题[通俗易懂]下面练习题中设计四个表。分别为:dept表emp表salgrade表tbyear表1.查出至少有一个员工的部门。显示部门编号、部门名称、部门位置、部门人数。SELECTd.deptno,d.dname,d.loc,e1.`count(*)`FROMdeptdINNERJOIN(SELECTdeptno,COUNT(*)FROMemp…

    2022年5月21日
  • android P系统访问http请求最简单解决方案

    在sdk28也就是P系统请求是http协议的话会报错:java.net.UnknownServiceException:CLEARTEXTcommunication**notpermittedby**是我的包名这是因为Google在sdk28做了限制加强了安全为保证用户数据和设备的安全,Google针对下一代Android系统(AndroidP)的应用程序…

    2022年4月8日
  • 安卓log日志查看工具_手机怎么查看错误日志

    安卓log日志查看工具_手机怎么查看错误日志一个完整的程序日志记录功能是必不可少的,通过日志我们可以了解程序运行详情、错误信息等,以便更好的发现及解决问题。日志可以记录到数据库、日志服务器、文件等地方,本文主要介绍文件日志。 文

    2022年8月1日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号