全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

@Resource注解和@Autowired注解的区别?

发布时间:2023-10-11 18:11:01
发布人:xqq

一、@Resource注解和@Autowired注解的区别

@Autowired注解是Spring提供的,而@Resource注解是J2EE本身提供的

@Autowird注解默认通过byType方式注入,而@Resource注解默认通过byName方式注入

@Autowired注解注入的对象需要在IOC容器中存在,否则需要加上属性required=false,表示忽略当前要注入的bean,如果有直接注入,没有跳过,不会报错

对于byName和byType方式不太熟悉的可以看一下这里:Spring中的byName与byType

简单来说,byName就是变量名去匹配bean的id属性,而byType则是变量类型去匹配bean的class属性

@Autowired

private UserService userService;

此处byName就是拿变量名userService去匹配IOC容器的iduserService,匹配成功;而byType就是拿变量类型UserService去匹配IOC容器的idcom.test.UserService.UserServiceImpl,因为UserServiceImpl是UserService实现,所以也匹配成功。

延伸阅读:

二、@Autowird注解的使用

步骤:@Autowird默认的注入方式为byType,也就是根据类型匹配,当有多个实现时,则通过byName注入,也可以通过配合@Qualifier注解来显式指定name值,指明要使用哪个具体的实现类

举例:

首先有一个接口UserService和两个实现类UserServiceImpl1和UserServiceImpl2,并且这两个实现类已经加入到Spring的IOC容器中了

@Service

public class UserServiceImpl1 implements UserService

@Service

public class UserServiceImpl2 implements UserService

1通过@Autowired注入使用

@Autowired

private UserService userService;

根据上面的步骤,可以很容易判断出,直接这么使用是会报错的

原因:首先通过byType注入,判断UserService类型有两个实现,无法确定具体是哪一个,于是通过byName方式,这里的变量名userService也无法匹配IOC容器中id(此处指的userServiceImpl1和userServiceImpl2),于是报错。

注意:通过注解注入到IOC容器的id值默认是其类名首字母小写

#it技术干货

相关文章

python self是什么意思,怎么使用?

python self是什么意思,怎么使用?

2023-10-11
“软链接” 和“硬链接”的区别?

“软链接” 和“硬链接”的区别?

2023-10-11
udp、tcp的区别,使用场景?

udp、tcp的区别,使用场景?

2023-10-11
模块化、组件化、插件化的区别?

模块化、组件化、插件化的区别?

2023-10-11

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取