@resource和@autowire的区别

在 Spring 中,@Resource 和 @Autowired 注解都可以用来实现依赖注入,它们之间的区别如下:

  1. 来源不同

@Resource 注解是由 JavaEE 提供的,而 @Autowired 注解是由 Spring 提供的。

  1. 注入方式不同

@Resource 注解默认按照名称注入,如果找不到与名称匹配的 Bean,则按照类型注入。例如:

@Resource
private UserDao userDao; // 按照名称 "userDao" 注入

名称可以通过name属性指定,如果没有指定name属性,当注解写在字段上时,默认取字段名,当注解写在setter方法上时,默认取属性名进行装配。

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

@Autowired 注解默认按照类型注入,如果有多个与类型匹配的 Bean,则根据名称进行匹配。例如:

@Autowired
private UserDao userDao; // 按照类型 "UserDao" 注入

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

  1. 支持的类型不同

@Resource 注解可以注入任何类型的 Bean,包括基本类型和字符串类型。

@Autowired 注解只能注入 Spring 管理的 Bean,不能注入基本类型和字符串类型。

  1. required 属性不同

@Resource 注解有一个 required 属性,默认值为 true,表示必须注入成功,否则抛出异常。

@Autowired 注解有一个 required 属性,默认值为 true,表示必须注入成功,否则抛出异常。同时,@Autowired 注解还有一个可选的属性:@Autowired(required = false),表示注入失败时不抛出异常。

  1. 注解的方式不同

@Autowired可以使用在字段和方法上,而@Resource只能使用在字段上

综上所述,@Resource 注解更为灵活,可以注入任何类型的 Bean,但其默认按照名称注入,不够直观;而 @Autowired 注解更为常用,可以根据类型自动注入,但只能注入 Spring 管理的 Bean。在使用时,应根据实际情况进行选择。

posted @   kd最棒  阅读(173)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示