@Autowired
和 @Resource
都是 Java 中用于进行依赖注入的注解,它们可以用于将一个对象引用注入到另一个对象中,从而实现对象之间的协作。
@Autowired
@Autowired
是 Spring 框架提供的注解,它可以用于自动装配 bean,即将一个 bean 注入到另一个 bean 中。
使用方式:
- 字段注入:
@Autowired
private SomeService someService;
- 构造函数注入:
private final SomeService someService;@Autowired
public SomeController(SomeService someService) {this.someService = someService;
}
- 方法注入:
@Autowired
public void setSomeService(SomeService someService) {this.someService = someService;
}
工作原理:
Spring 在启动时会扫描应用程序上下文中的所有 bean,并将它们自动装配到相应的依赖项中。它会根据类型进行匹配,如果存在多个类型匹配的 bean,则会根据变量名进行匹配。
@Resource
@Resource
是 JavaEE 提供的注解,它也可以用于进行依赖注入。
使用方式:
@Resource
private SomeService someService;
工作原理:
@Resource
默认按照名称进行注入,如果找不到与依赖项名称匹配的 bean,则会尝试按照类型进行匹配。可以通过 name
属性指定要注入的 bean 的名称。
区别:
-
来源不同:
@Autowired
是 Spring 框架提供的注解。@Resource
是 JavaEE 提供的注解。
-
注入方式:
@Autowired
默认按照类型进行注入,可以通过@Qualifier
指定具体的 bean 名称。@Resource
默认按照名称进行注入,可以通过name
属性指定具体的 bean 名称。
-
兼容性:
@Autowired
是 Spring 提供的注解,在 Spring 环境中使用较为方便。@Resource
是 JavaEE 提供的注解,可以在非 Spring 环境中使用。
-
可选性:
@Autowired
默认要求依赖项必须存在,如果找不到匹配的 bean,则会抛出异常。@Resource
可以设置required = false
,允许依赖项不存在。
总的来说,@Autowired
是 Spring 框架提供的一种依赖注入方式,而 @Resource
是 JavaEE 提供的另一种依赖注入方式。在 Spring 环境中,推荐使用 @Autowired
,因为它提供了更丰富的功能和更灵活的配置选项。如果需要保持代码的独立性,可以考虑使用 @Resource
。