首页 > 其他分享 >Autowired注解与Resource注解的区别

Autowired注解与Resource注解的区别

时间:2023-06-05 20:35:01浏览次数:34  
标签:Resource name Autowired bean 注解 注入

两者的用法

其实这两个注解的作用都一样,都是在做bean的注入,在使用过程中,两个注解有时候可以替换使用.

两者的共同点

  1. @Resource注解和@Autowired注解都可以用作bean的注入.
  2. 在接口只有一个实现类的时候,两个注解可以互相替换,效果相同.

两者的不同点

  1. @Resource注解是Java自身的注解,@Autowired注解是Spring的注解.
  2. @Resource注解有两个重要的属性,分别是name和type,如果name属性有值,则使用byName的自动注入策略,将值作为需要注入bean的名字,如果type有值,则使用byType自动注入策略,将值作为需要注入bean的类型.如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。即@Resource注解默认按照名称进行匹配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名,按照名称查找,当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
  3. @Autowired注解是spring的注解,此注解只根据type进行注入,不会去匹配name.但是如果只根据type无法辨别注入对象时,就需要配合使用@Qualifier注解或者@Primary注解使用.
    案例

如上图所示,有一个UserService接口,同时创建了两个此接口的实现类,然后用UserController类来测试两个注解的不同用法. 注意如果接口只有一个实现类,就两个注解可以相互替换,效果相同.

1.只使用Autowired注解

可以明显看到报错信息,大概意思是说接口有超过两个实现类,不知道你要注入哪一个.

2.Autowired注解与Qualifier注解一起使用

你上面不是不知道我要注入哪一个bean嘛,我现在指定了bean的名字,你老老实实给我注入进来吧.

3.使用Resource注解,但未设置name属性

虽然此时不报错,但是启动之后控制台会有报错信息,关键信息如下:

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'cn.tedu.sp01.service.UserService' available: expected single matching bean but found 2: userServiceImpl01,userServiceImpl02

反正就是不能注入此类型的bean.

4.使用@Resource注解,并设置了name属性

启动之后,未有报错.

总结

如上面的例子,一个接口,俩个实现类,Autowired就不知道注入哪一个实现类(得与@Qualifier注解搭配使用才知道),而Resource有name属性,可以区分要注入哪一个实现类。

标签:Resource,name,Autowired,bean,注解,注入
From: https://www.cnblogs.com/jundong2177/p/17458861.html

相关文章

  • 资源释放发方式二:try-with-resource
        ......
  • 纯注解方式整合Spring和Mybatis框架
    一、配置信息介绍application-dao.xml  application-dao.xml配置文件中配置的内容包含以下4项:读取jdbc.properties文件中的数据连接信息。创建Druid对象,并将读取的数据连接信息注入到Druid数据连接池对象中。创建SqlSessionFactoryBean对象,将并将Druid对象注入到SqlSessi......
  • Spring注解校验@Valid的手动调用
    在做Spring项目的时候,@Valid可以完成优雅的参数校验,但是在不少特殊场景下,会有字段组合校验的场景.这种情况下,就需要在后台手动校验,那么如何在后端也优雅的参数校验,避免一堆判断和抛异常呢,可以试试在满足校验场景下手动触发@Valid校验.1.第一步:定义校验对象点击查看代......
  • Java之基于注解的Excel导出
    数据库Excel导出操作代码过于冗长惨不忍睹,无法复用。【推荐使用阿里巴巴组件:关于Easyexcel|EasyExcel】目录第一步:自定义注解:第二步:实体类:第三步:解析工具类:第四步:使用:依赖:<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base<......
  • 【 Lombok】Lombok常用注解说明
    官方文档:https://projectlombok.org/features/index.html@Data注解在类上;提供类所有属性的getting和setting方法,此外还提供了equals、canEqual、hashCode、toString方法@Setter:注解在属性上;为属性提供setting方法@Getter:注解在属性上;为属性提供getting方法@Log4j:注......
  • Java反射获取不到注解
    在CGlib动态代理的情况下method.getAnnotation(PostMapping.class);这样是获取不到注解的.需要用Spring自带的工具类来获取:AnnotationUtils.findAnnotation(method,PostMapping.class);......
  • brpc - ResourcePool
    资源池ResourcePoolResourcePool<T>::singleton()->get_resource(id,arg1);template<typenameT>classResourcePool{...}是个类模板,单例模式。主要成员:get_resource/return_resource有个LocalPool成员,依赖它实现get和return。LocalPool有一个概念是FreeChunk,......
  • 自定义异步注解
    <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId></dependency>@RestController@Slf4jpublicclassThread04{@Autowiredprivate......
  • Spring常用注解
    SVN多版本库环境的搭建OAuth2.0是什么?看这篇文章就够了。前端JavaPython等资源合集大放送使用注解之前要开启自动扫描功能,其中base-package为需要扫描的包(含子包)。<context:component-scanbase-package="cn.com.cms"/>@Configuration把一个类作为一个IoC容器,它的某个方法头上......
  • duboo注解使用详解
    一、背景随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行。当越来越的的接口与实现类的增加后,duboo的xml配置会越来越多,为了防止几百几千行的代码,减少开发人员配置xml的工作量,使用duboo的注解模式,减少配置多出问题多的......