有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`
@Autowired 和 @Resource 的区别
当我们在Spring框架中进行依赖注入时,我们通常会使用 @Autowired 和 @Resource 这两个注解。虽然这两个注解都是用来实现依赖注入的,但它们之间还是存在一些差异。
@Autowired
@Autowired 是Spring框架提供的注解,它可以对类成员变量、方法以及构造函数进行标注,来完成自动装配的工作。通过 @Autowired 的使用,Spring 会在启动时进行自动扫描,并将标记了该注解的类的依赖关系自动注入。
特点:
- 默认按照类型进行自动装配 (byType)。
- 如果需要按名称进行装配,则需要和 @Qualifier 注解一起使用。
- 当找不到合适的Bean装配时,会抛出异常,除非将 required 属性设置为 false。
代码示例:
@Service
public class MyService {
@Autowired
private MyDependency myDependency;
}
@Resource
@Resource 是由JSR-250规范提供的注解。这个注解是属于JavaEE的,从JavaEE 5开始就拥有了 @Resource 注解,Spring 支持这个注解并且在其基础之上增加了额外的功能。
特点:
- 默认按照名称进行自动装配 (byName)。
- 如果没有指定名称,它会默认使用需要注入的变量的名称作为Bean的名称来查找。
- 如果按名称注入失败,则会按照类型进行注入。
- 不需要与其他注解配合使用。
- 提供了 name、type、authenticationType 等属性。
代码示例:
@Service
public class MyService {
@Resource
private MyDependency myDependency;
}
总结
@Autowired是Spring的注解,主要是按类型 (byType) 自动装配,而@Resource是JavaEE的注解,主要是按名称 (byName) 自动装配。@Autowired与@Qualifier配合使用可以按名称进行装配,而@Resource可以通过name属性直接指定Bean的名称。- 在注入时,
@Autowired通过设置required属性来避免异常,而@Resource有更多的配置属性如name和type。
在选择使用哪一个注解时,需要考虑你的具体需求和你使用的Spring版本,以选择最适合你项目的注解。


