一切福田,不離方寸,從心而覓,感無不通。

简述@Autowired和@Resource的区别(通俗易懂)

前言:

在日常的开发项目当中,这两个注解是经常会用到的,但是在实际使用当中好像使用起来并没有多大区别,这里我就对这两个注解进行一个详细的区别总结,通过一个完整的典型例子进行论证,思路清晰明了。

目录

一、结论

二、典型案例

(一)、准备代码

(二)、使用@Autowired默认进行注入

(三)、使用@Autowired+@Qualifier进行注入

(四)、使用@Resource默认进行注入

(五)、使用@Resource指定名称进行注入

三、结语


一、结论

先说结论:

 

二、典型案例

这里我搭建了一个简单的springboot项目,并写了一个接口和其对应的两个实现类,来具体通过代码来证明以上的结论。

(一)、准备代码

UserService接口:

 

UserServiceImpl实现类

 

UserServiceImpl2实现类

 

(二)、使用@Autowired默认进行注入

单元测试

 

运行结果

org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.ithuang.demo.DemoApplicationTests': Unsatisfied dependency expressed through field 'userService'; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.ithuang.demo.service.UserService' available: expected single matching bean but found 2: userServiceImpl,userServiceImpl2

大概意思就是说在使用@Autowired进行注入的时候,默认根据了类型进行了注入,并没有指定Bean的名称,导致了Spring容器发现了两个Bean,从而不知道注入哪个Bean。

(三)、使用@Autowired+@Qualifier进行注入

单元测试

 

运行结果

方法2:执行了插入操作…

这次便成功完成了注入并且在控制台输出了第二个实现类当中的方法,通过@Qualifier来指定Bean的名称进行了注入。

(四)、使用@Resource默认进行注入

单元测试

 

运行结果

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.ithuang.demo.DemoApplicationTests': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'com.ithuang.demo.service.UserService' available: expected single matching bean but found 2: service,service2

还是和之前一样的问题,因为@Resource并没有通过name指向具体的Bean,导致无法完成注入。

(五)、使用@Resource指定名称进行注入

单元测试

 

运行结果

方法1:执行了插入操作…

这次控制台正常输入,通过name指定Bean的名称来完成注入即可。

三、结语

以上就是我对@Autowired和@Resource两个在工作当中经常用到的注解的理解和分享。

 

from:https://blog.csdn.net/HJW_233/article/details/126733085