@Resource 和 @Autowired 都是用于依赖注入的注解,但它们来自不同的规范,并且在使用上有一些区别。
@Resource
- 来源:@Resource 是 JSR-250 规范的一部分,属于 Java 标准库中的注解,位于 javax.annotation 包下。
- 注入方式:默认情况下,@Resource 根据名称进行注入。如果没有指定名称,则默认为属性的名称。也可以通过 name 或 type 属性指定。
- 配置:可以使用 @Resource(name="beanName") 来显式指定要注入的 bean 名称。
@Autowired
- 来源:@Autowired 是 Spring 框架的一部分,位于 org.springframework.beans.factory.annotation 包下。
- 注入方式:默认情况下,@Autowired 根据类型进行注入。如果有多个相同类型的 bean,可以结合 @Qualifier 注解按名称注入。
- required 属性:@Autowired 有一个 required 属性(默认为 true),表示该依赖是否必须注入。如果设置为 false,则在找不到匹配的 bean 时不会抛出异常,而是注入 null。
具体区别
1.注入策略:
@Resource:默认按名称注入,找不到匹配的名称时再按类型注入。
@Autowired:默认按类型注入,需要按名称时需要配合 @Qualifier 使用。
2.依赖:
@Resource:依赖于 Java EE 标准,适用于任何 Java 环境。
@Autowired:依赖于 Spring 框架,适用于 Spring 环境。
3.额外属性:
@Autowired:提供了 required 属性,控制依赖是否必须存在。
@Resource:没有类似的属性。
示例代码:
总的来说,@Resource 更加通用,适用于任何 Java 环境,而 @Autowired 则更适合 Spring 环境,并且提供了更多的 Spring 特定特性。
本文暂时没有评论,来添加一个吧(●'◡'●)