@Autowired、@Resource、@Inject

115 阅读1分钟

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。
  • 默认按照类型进行匹配。
  • 不支持 @Autowiredrequired 属性,因此在使用时,要确保依赖关系是可选的。
  • 默认是非必须的,找不到匹配的依赖项不会引发异常。可以使用 Optional 类型或将依赖项声明为 @Nullable 来处理非必须的情况。
@Inject
private SomeBean someBean; 

总体来说,选择使用哪个注解取决于具体的应用场景和项目使用的规范。在 Spring 项目中,通常使用 @Autowired 进行依赖注入。