@AutoWired和@Resource注解异同分析
相同点:
@AutoWired和@Resource注解都是从Spring容器中取出相应的bean对象,自动装配。
不同点:
@AutoWired:
默认根据类型进行自动装配,依赖的对象必须存在,如果允许为null值,需要加required=false,即@AutoWired(required=false);若要通过名称装配可以配合@Qualifier注解;
@Resource:
默认根据名称进行自动装配,由nane属性指定名称,代码如下:
//定义一个Animal接口
public interface AnimalService {//定义一个eat的抽象方法,由子类去重写void eat();
}
//定义Cat类实现AnimalService接口
@Service
public class CatServiceImpl implements AnimalService {//重写eat方法@Overridepublic void eat() {System.out.println("猫喜欢吃鱼");}
}
//定义Dog类实现AnimalService接口
@Service
public class DogServiceImpl implements AnimalService{//重写eat方法@Overridepublic void eat() {System.out.println("狗喜欢吃骨头");}
}
//单元测试
@SpringBootTest
public class DemoApplicationTests {/*** 此处若只写@AutoWired注解,会报错,因为AnimalService接口有两个实现类,默认根据类型匹配会冲突,因此需要配合@Qualifier注解使用名称定位到具体bean,注意value属性首字母要小写,前提是@Service注解没有配置value属性,否则要与其保持一致。*/@Autowired@Qualifier(value = "catServiceImpl")//@Resource(name="catServiceImpl")也可使用该注解代替上面两个注解,效果完全一样。private AnimalService animalService;@Testvoid contextLoads() {animalService.eat();}
}
看下执行效果:
2020-06-05 17:05:57.531 INFO 14521 --- [ main] com.example.demo.DemoApplicationTests : Starting DemoApplicationTests on FinupdeMacBook-Pro.local with PID 14521 (started by finup in /Users/configSoftWare/IdeaProjects/demo)
2020-06-05 17:05:57.533 INFO 14521 --- [ main] com.example.demo.DemoApplicationTests : No active profile set, falling back to default profiles: default
Loading class `com.mysql.jdbc.Driver'. This is deprecated. The new driver class is `com.mysql.cj.jdbc.Driver'. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
2020-06-05 17:05:59.479 INFO 14521 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2020-06-05 17:05:59.576 INFO 14521 --- [ main] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page template: index
2020-06-05 17:05:59.865 INFO 14521 --- [ main] com.example.demo.DemoApplicationTests : Started DemoApplicationTests in 2.633 seconds (JVM running for 3.702)猫喜欢吃鱼
原博文链接:http://www.54gwz.cn/article/1591346836
@AutoWired和@Resource注解异同分析相关推荐
- @Autowired和@Resource注解的区别?
谈到Spring的注解,@Autowired和@resource这两个注解不得不提.@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上 那@A ...
- Spring系列(十):@Autowired 和@Resource注解用法介绍
今天给大家分享Spring属性注入的注解@Autowired 和@Resource介,希望对大家能有所帮助! 一.@Autowired 注解 1.1 介绍 @Autowired注解默认按照类型容器中找 ...
- Springboot中@autowired和@resource注解的区别
@Autowired @Autowired是Spring提供的,默认按照byType 注入,也就是按bean的类型来传入.如果需要指定名字,那么需要使@Qualifier("这是bean的名 ...
- Spring下的@Inject、@Autowired、@Resource注解区别(转)
1.@Inject javax.inject JSR330 (Dependency Injection for Java) 这是JSR330中的规范,通过AutowiredAnnotationBean ...
- Spring中@Autowired和@Resource的区别
一.定义 @Autowired 对类成员变量.方法及构造函数进行标注,完成自动装配的工作. @Resource 在语义上被定义为通过其唯一的名称来标识特定的目标组件,其中声明的类型与匹配过程无关. 如 ...
- @Autowired、@Resource
@Autowired 通过 @Autowired的使用来消除 set ,get方法 - Spring 2.5 JPA hibernate 使用方法的点滴整理 我们编写spring 框架的代码时候.一直 ...
- (转)用@Resource注解完成属性装配
http://blog.csdn.net/yerenyuan_pku/article/details/52858878 前面我们讲过spring的依赖注入有两种方式: 使用构造器注入. 使用属性set ...
- @Autowired 和 @Resource 的区别(为什么更推荐使用@Resource ?)
@Autowired 和 @Resource 的有什么区别? 相同点 不同点 @Autowired @Resource @Resource的装配顺序 要是实在不理解可以看看这个视频 !!! 为什么更推 ...
- 详述 @Service 和 @Resource 注解的区别
1 前言 在我们使用 Spring 框架的时候,注解是"不可或缺"的一部分,它帮我们脱离了配置繁琐的 XML 文件的工作,但有一点却需要我们自己去把握,那就是"3何&qu ...
最新文章
- Hyperledger Fabric 管道(2) 管道的操作
- mysql物流管理系统_wuliuwang 物流信息管理系统 ssh2 mysql(Logistics Information Management System) - 下载 - 搜珍网...
- 第三次学JAVA再学不好就吃翔(part117)--单例设计模式
- php授权验证系统 c,OAuth 2.0 授权码认证
- python对excel数据更改_利用python对excel中一列的时间数据更改格式代码示例
- python爬虫之js链接跳转抓取_Python爬虫获取页面所有URL链接过程详解
- C语言里printf函数格式控制符的完整格式
- 基于FPGA的三人表决器设计
- mysql清空数据库_mysql命令行快速清空数据库的方法
- 极智开发 | UmiJS 快速上手
- 傅里叶变换中的假频**
- teraterm linux环境,linux ssh telnet TeraTerm终端中文显示乱码解决方法
- 网站跳出率过高的原因有哪些?怎么解决?
- python基础学习总结
- 如何用尺规作图画圆的切线_尺规作图过圆外一点作圆的切线的四种方法
- 如何同时或者按顺序间隔启动多个程序
- 外贸人如何快速学好英语
- linux中strlen的用法,实现strlen()函数,strcmp()函数 const知识点
- 音频节奏检测(Onset Detection)
- 入职B站一年,被裁员了,我思考了哪些?