首页 > 其他分享 >@Autowired和@Resource的区别

@Autowired和@Resource的区别

时间:2023-09-14 15:14:11浏览次数:50  
标签:Resource 区别 Autowired Bean 注解 RedisTemplate 注入

@Autowired和@Resource都是Spring框架中用于依赖注入的注解,它们的作用是将一个依赖对象自动注入到另一个对象中。它们的区别如下:

@Autowired是Spring自带的注解,而@Resource是Java EE 5规范中定义的注解,需要依赖JDK或者其他框架的支持。

@Autowired默认按照类型进行自动装配,如果有多个同类型的Bean,则需要通过@Qualifier指定具体的Bean名称。而@Resource默认按照名称进行自动装配,如果没有指定名称,则默认使用成员变量名称作为Bean名称。

@Autowired是通过BeanPostProcessor实现的,而@Resource是通过javax.annotation.Resource实现的。

@Autowired可以注入任意类型的Bean,包括自定义类型、接口类型、抽象类类型等。而@Resource只能注入Java EE规范中定义的资源,例如DataSource、JMS ConnectionFactory等。

总的来说,如果项目是基于Spring框架的,建议使用@Autowired注解,但是当使用@Autowired注入时如果是一个RedisTemplate,如下:

    @Autowired
    private RedisTemplate<String,Integer> redisTemplate;

这时会报以下错误:

Field redisTemplate in ... required a bean of type ...RedisTemplate' that could not be found.

这是因为@Auowired是根据类型来注入的,泛型也被算在里面,而RedisTemplate里并没有想要注入的这一类型,所以注入失败,而@Resource默认根据名称注入,RedisTemplate这个bean在我们的RedisConfig里被加到了spring容器中,所以可以注入。这时有几种解决方式:

1、将RedisTemplate对象上的注解从@Autowired改成@Resource;

2、在注入RedisTemplate的时候将泛型去掉

3、添加依赖:

        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-pool2</artifactId>
        </dependency>

4、可以通过创建一个bean,加上泛型的RedisTemplate交给IOC容器管理

标签:Resource,区别,Autowired,Bean,注解,RedisTemplate,注入
From: https://www.cnblogs.com/hwj7/p/17702534.html

相关文章

  • SpringBoot中@ConfigurationProperties和@PropertySource的区别
    @ConfigurationProperties用于将主配置文件(application.properties或者“application.yml”)中的属性,映射到实体类中对应的属性。意思就是把主配置文件中配置属性设置到对应的Bean属性上。只需要写明prefix,如下,prefix是sever,就会自动将application文件中以sever开头的配置一一注......
  • ES 中的Query与Filter区别
    query与filter的区别filter:可以简单的理解为Filter就是数据库中的查询语句,结果是确定的。即满足查询条件就返回,不满足就不返回.query:而Query则是文档相关性的查询,他总会返回数据(一般情况下,只是匹配度不高),而且是按照相关性从大到小排序.总结1、因此filter的查询是......
  • count() 和 count(1) 有什么区别?哪个性能最好?
    count(*)和count(1)有什么区别?哪个性能最好?count(*)和count(1)没有区别,因为count(*)会优化为count(0)count(字段)的性能是最差的,因为要遍历一遍,并且还要比较是否是null结论:count(*)=count(1)>count(字段)怎么解决呢使用近似值,使用explain命令,返回值有rows列,标识表的近......
  • ArrayList和LinkedList的区别
    1.顾名思义,前者底层数据结构采用数组结构,通过索引来实现快速随机访问元素;而后者采用双向链表结构,每个元素都包含一个指向前一个元素和后一个元素的引用,所以插入,删除元素效率很高。2.时间复杂度不同,前者为O1,为常量复杂度,执行一次,后者为On,从头部或尾部开始执行N次。3.前者占用的空......
  • Mybatis中#{}和${}的区别
    #和$都是一种占位符号,都是实现动态SQL的方式1.#占位符等同于dbc里的问号占位符,他相当于向preparestatement里面的预处理语句设置参数,sql语句预编译时会将特殊字符转义,可以有效防止SQL注入。2.\$是用于动态传参,多用于动态SQL里动态传递表名,动态设置排序字段。......
  • TreeView的基本使用,以及和TableView的区别
    Qt中的QTreeView是一个用于显示树形数据的强大控件,通常用于显示层次结构数据。以下是使用QTreeView的基本步骤:创建一个QTreeView实例:在你的主窗口或其他窗口部件中创建一个QTreeView实例:QTreeView*treeView=newQTreeView(this);创建一个数据模型:QTreeView需要一个数......
  • ==和equals的区别
     ==:既可以判断基本类型,又可以判断引用类型。==:如果判断基本类型,判断的是值是否相等。==:如果判断的是引用类型,判断的是地址是否相等,即判断是不是同一对象。equals:是object类中的方法,只能判断引用类型。默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。(具体可查......
  • Java基础——==和equals的区别
     ==:既可以判断基本类型,又可以判断引用类型。==:如果判断基本类型,判断的是值是否相等。==:如果判断的是引用类型,判断的是地址是否相等,即判断是不是同一对象。equals:是object类中的方法,只能判断引用类型。默认判断的是地址是否相等,子类中往往重写该方法,用于判断内容是否相等。(具体可查......
  • 阿里云轻量应用服务器和ECS有什么区别?
    阿里云服务器ECS和轻量应用服务器有什么区别?云服务器ECS是明星级云服务器,轻量应用服务器可以理解为简化版的云服务器ECS,轻量适用于单机应用,云服务器ECS适用于集群类高可用高容灾应用,阿里云百科来详细说下阿里云轻量应用服务器和云服务器的区别,包括运维区别、镜像系统、使用场景、网......
  • java安全架构____对称加密和非对称加密区别(对称秘钥,非对称秘钥)
    (一)对称加密(SymmetricCryptography)对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secretkey),这种方法在密码学中叫做对称加密算法。对称加密通常使用的是相对较小的密钥,一般小于256bit。因为密钥越大,加密越强.例如AES,DES(二)......