为啥以及何时在 Spring 中使用 @Inject 而不是 @Autowired? [复制]

Posted

技术标签:

【中文标题】为啥以及何时在 Spring 中使用 @Inject 而不是 @Autowired? [复制]【英文标题】:Why and When use @Inject instead of @Autowired in Spring? [duplicate]为什么以及何时在 Spring 中使用 @Inject 而不是 @Autowired? [复制] 【发布时间】:2020-05-10 18:09:46 【问题描述】:

自 Spring 3.0 起,Spring 支持标准 JSR 330:Java 的依赖注入。在 Spring 3 应用程序中,您可以使用

@Inject 而不是 Spring 的 @Autowired 来注入一个 bean。 @Named 而不是 Spring 的 @Component 来声明一个 bean。

我应该什么时候使用?

【问题讨论】:

【参考方案1】:

@Inject 注解也有同样的作用,但它们之间的主要区别在于@Inject 是依赖注入的标准注解,@Autowired 是特定于 spring 的。

阅读更多:https://javarevisited.blogspot.com/2017/04/difference-between-autowired-and-inject-annotation-in-spring-framework.html#ixzz6Bwt3RUg9

【讨论】:

正确!但是当我们应该使用@Inject 和/或@Autowired【参考方案2】:

长话短说,这些注解是 Spring Guy 为支持 Java EE(现为 Jakarta EE)规范的某些部分所做的努力,这些是那里的注入官方注解。 Spring 人员添加它们是为了促进 Spring 的采用和从 Java EE 进行系统迁移。

那么什么时候使用这个注解呢?如果您计划迁移到 Jakarta EE 或者从 Jakarta EE 迁移,那么使用它们来促进流程或保持系统一致是有意义的。否则,请选择 Spring“官方”版本。

【讨论】:

【参考方案3】:

如果你只使用 spring,并且没有特殊行为,你可以使用任何注解:它们将被相同的处理。

如果您使用(或计划使用)其他依赖管理器(JavaEE、Guice、XWiki 内部容器,...)@Inject@Named 由 JSR-330 定义,现在所有这些都支持容器。

另一方面,如果您打算使用所有 spring 特定的好东西,spring 特定的注释可能允许更精细的配置。

【讨论】:

以上是关于为啥以及何时在 Spring 中使用 @Inject 而不是 @Autowired? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥使用片段,以及何时使用片段而不是活动?

我何时以及为啥要在 Swift 中使用协议?

为啥以及何时使用重组分支?

为啥我们需要复制构造函数以及何时应该在 java 中使用复制构造函数

为啥以及何时需要在 MongoDB 中重建索引?

为啥以及何时应该在块的末尾使用逗号?