@Resource和@Autowire的区别

瀑布君
• 阅读 683

@Resource和@Autowired

@Resource和@Autowired都可以用来装配bean,都可以用于字段或setter方法。

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

@Resource默认按名称装配,当找不到与名称匹配的bean时才按照类型进行装配。名称可以通过name属性指定,如果没有指定name属性,当注解写在字段上时,默认取字段名,当注解写在setter方法上时,默认取属性名进行装配。

注意:如果name属性一旦指定,就只会按照名称进行装配。

@Autowire和@Qualifier配合使用效果和@Resource一样:

@Autowired(required = false) @Qualifier("example")
private Example example;

@Resource(name = "example")
private Example example;

@Resource装配顺序

1.如果同时指定name和type,则从容器中查找唯一匹配的bean装配,找不到则抛出异常

2.如果指定name属性,则从容器中查找名称匹配的bean装配,找不到则抛出异常

3.如果指定type属性,则从容器中查找类型唯一匹配的bean装配,找不到或者找到多个抛出异常

4.如果都不指定,则自动按照byName方式装配,如果没有匹配,则回退一个原始类型进行匹配,如果匹配则自动装配

简要对比表格

注解对比@Resource@Autowire
注解来源JDKSpring
装配方式优先按名称优先按类型
属性name、typerequired
点赞
收藏
评论区
推荐文章
Easter79 Easter79
4年前
Springboot中如何在Utils类中使用@Autowired注入bean
Springboot中如果希望在Utils工具类中,使用到我们已经定义过的Dao层或者Service层Bean,可以如下编写Utils类:1\.使用@Component注解标记工具类StatisticsUtils:2\.使用@Autowired(@Autowired和@Resource的区别不再介绍)注入我们需要的bean:3\.在工具类中
Stella981 Stella981
4年前
Spring Boot的@Service和@Autowired和@ComponentScan注解
SpringBoot的@Service和@Autowired和@ComponentScan注解SpringBoot项目的Bean装配默认规则是根据Application类(SpringBoot项目入口类)所在的包位置从上往下扫描,即只扫描该类所在的包及其子包。1.如果需要扫描其上层包中的类,则将其移动到其上层包中2.使用@ComponentSc
Wesley13 Wesley13
4年前
spring3.x注解自动注入
一、各种注解方式1.@Autowired注解(不推荐使用,建议使用@Resource)@Autowired可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作。@Autowired的标注位置不同,它们都会在Spring在初始化这个bean时,自动装配这个属性。要使@Autowired能够工作,还需要在配置文件中加入以下Xml代码
Stella981 Stella981
4年前
SpringAnnotation注解之@Autowired
@Autowired:自动装配,不用在bean里写<property属性来指定所依赖的属性1234@AutowiredpublicvoidsetUserDao(UserDaouserDao){this.userDaouserDao;}Autowired:表示spring
Stella981 Stella981
4年前
Spring 4.3 的新功能和增强
核心容器改进核心容器额外提供了更丰富的元数据来改进编程。默认Java8的方法检测为bean属性的getter/setter方法。如果目标bean只定义了一个构造函数,则它无需要指定@Autowired注解@Configuration类支持构造函数注入。任何SpEL
Stella981 Stella981
4年前
Spring MVC 解读——@Autowired
SpringMVC解读——@Autowired一、@Autowired    作为一个Spring开发者对@Autowired注解必定是非常了解了,顾名思义自动装配,应该是Spring会自动将我们标记为@Autowired的元素装配好,与其猜测不如看看它的定义:@Targe
Easter79 Easter79
4年前
SpringMvc中@resource和@autowired区别
在java代码中使用@Autowired或@Resource注解方式进行装配这两个注解的区别是:@Autowired默认按类型装配,@Resource(https://my.oschina.net/u/929718)默认按名称装配,当找不到与名称匹配的bean才会按类型装配。如果我们想使用按名称装
Easter79 Easter79
4年前
Spring使用注解装配之@Autowired
1:可选的自动装配@Autowired具有强契约特征,其标注的属性或者参数必须是可装配的如果没有bean可装配,那么自动装配会失败,抛出NoSuchBeanDefinitionException当然,属性并不一定非要装配。null值也是可接受的。这样的话通过设置@Autowired(requiredfalse)来配置自动装配时可选的如果没有找到对
Easter79 Easter79
4年前
Spring注解详解
概述  注解的优势主配置简单只需要添加标签,JAVA的反射机制就可以根据标签自动注入自动初始化。@Autowired  配置方式:属性、setter方法或构造器都可以    不推荐使用,建议使用@Resource(http://my.oschina.net/u/929718),因为要使这个注解生效还需要在Spring配置文件中配
Easter79 Easter79
4年前
Spring注解@Resource和@Autowired区别对比、spring扫描的默认bean的Id、程序获取spring容器对象
\注解扫面的bean的ID问题0.前提需要明白注解扫描出来的bean的id默认是类名首字母小写,当然可以指定id:
Easter79 Easter79
4年前
Spring两种依赖注入方式的比较
我们知道,Spring对象属性的注入方式有两种:设值注入和构造注入。先看代码:  假设有个类为People,该对象包含三个属性,name和school还有age,这些属性都有各自的setter和getter方法,还有一个包含这三个属性的构造方法。如果用spring来管理这个对象,那么有以下两种方式为People设置属性:  1.设值注入: