1. @Autowired:
- 来源:Spring 框架的注解。
- 自动装配 Bean。
- 默认按照类型进行匹配。
- 可以与
@Qualifier一起使用,通过指定 Bean 的名称进行匹配。 - 默认情况下是必须的,如果找不到匹配的依赖项,应用程序启动时会抛出异常,但可以通过设置
required属性为false来使其变为非必须。
@Autowired
private SomeBean someBean;
2. @Resource:
- 来源:JSR 250 规范中的注解。
- 用于自动装配 Bean。
- 默认按照名称进行匹配。
- 可以通过
name属性指定装配的 Bean 名称。 - 默认情况下是非必须的,除非显式地设置了
required属性为true。
@Resource(name = "someBean")
private SomeBean someBean;
3. @Inject:
- 来源:JSR 330 规范中的注解。
- 用于自动装配 Bean。
- 默认按照类型进行匹配。
- 不支持
@Autowired的required属性,因此在使用时,要确保依赖关系是可选的。 - 默认是非必须的,找不到匹配的依赖项不会引发异常。可以使用
Optional类型或将依赖项声明为@Nullable来处理非必须的情况。
@Inject
private SomeBean someBean;
总体来说,选择使用哪个注解取决于具体的应用场景和项目使用的规范。在 Spring 项目中,通常使用 @Autowired 进行依赖注入。