Spring spring

Spring中文网站 > Spring Integration > Spring的resource注解 Spring注解autowired和resource区别
Spring的resource注解 Spring注解autowired和resource区别
发布时间:2026/03/25 11:29:21

品牌型号:联想ThinkPad X1

系统:Windows10家庭版

软件版本:Spring 5.3.7

刚开始学Spring注解开发总是绕不开依赖注入这块,特别是在碰到@Autowired和@Resource这两个注解的时候很懵,虽然都是用来注入对象的,但是用起来却总是踩坑,要么是注入失败导致了空指针异常,要么就是分不清什么时候使用Autowired什么时候使用Resource。甚至刚开始只知道Autowired,都不知道Resource注解的存在。这两个注解是Spring依赖注入的时候经常要用到的,弄清楚@Resource注解的用法,理清它跟Autowired的区别可以帮我们少走很多弯路,也能让代码更贴合我们实际开发的需求。下面就给大家介绍Spring的resource注解,Spring注解autowired和resource区别的相关内容。

一、Spring的resource注解

随着学习的深入,我们从原来的XML配置开发转到了注解开发,之前在XML配置开发的时候,代码中通过setter方法或者构造方法进行依赖注入。

使用set方法进行依赖注入
图1:使用set方法进行依赖注入

并在配置文件中使用标签注入依赖。

通过property标签注入依赖
图2:通过property标签注入依赖

现在我们只需要使用@Resource注解,就可以完成依赖注入,我们在需要注入的属性上输入@Resource注解就可以了,不需要再去写setter方法。

在需要注入的属性上添加@Resource注解
图3:在需要注入的属性上添加@Resource注解

要注意,这个@Resource注解是在javax.annotation包中,所以我们在使用的时候,需要在pom文件中添加依赖,不然的话,这个注解编译的时候就会报错。

在maven中添加依赖
图4:在maven中添加依赖

二、Spring注解autowired和resource区别

上面我们讲解了Resource注解的基本使用,那么Autowired注解也可以用来依赖注入,两者有什么区别吗?

我们在使用Autowired注解的时候,也可以不用创建setter方法就能进行依赖注入。

Autowired注解使用
图5:Autowired注解使用

我们测试发现,也是能正常注入依赖并且不会出现NullPointerException,Autowired它的逻辑是先找唯一匹配类型的Bean,如果整个容器中只有一个匹配那么就直接注入。如果遇到同类型下有多个Bean时,那么还需要结合@Qualifier注解检查Qualifier中的name是否和某个Bean名称一致。而Resource注解中可以使用name属性,如果不设置name属性,那么默认会用字段名或者setter方法名作为Bean名称去匹配,如果匹配不到名称,才降级按照类型去匹配。如果我们设置了name就按照name属性去匹配。

Resource注解中的的name属性
图7:Resource注解中的name属性

Autowired支持构造器注入,但是Resource不支持构造器注入,Resource只能用于字段、setter方法上。总得来说,Resource比较灵活,但是我们日常开发的时候优先使用@Autowired,在多Bean场景下我们会使用Resource注解。

Resource注解不能用于构造方法上
图8:Resource注解不能用于构造方法上

我们在介绍Resource注解的时候有提到过,这个注解是在javax.annotation包中,它并不是Spring专属的注解,是JDK标准注解,而Autowired是Spring框架原生注解,所以如果是简单注入并且无多Bean冲突的情况下,推荐使用Autowired注解进行依赖注入。

以上就是Spring的resource注解,Spring注解autowired和resource区别的全部内容了。Spring在做注解开发的时候,我们可以使用Resource注解进行依赖注入,Resource注解如果没有配置name,会自动根据属性名、setter方法名去匹配Bean,找不到Bean才会降级按照类型去找Bean。而Autowired会先根据类型,如果同类型下多个Bean,需要使用Qualifier注解来做依赖注入。

读者也访问过这里:
180 1563 6924