【问题标题】:What is the difference between @Inject and @Autowired@Inject 和 @Autowired 有什么区别
【发布时间】:2011-11-25 23:51:54
【问题描述】:

我只是想知道@Inject 和@Autowired 之间有什么区别 什么时候使用每一个?,或者他们正在做同样的事情?

如果我有一个具有作用域的 spring bean:

@Service
@Scope("singleton")

我可以为它进行依赖注入吗?

提前致谢。

【问题讨论】:

    标签: spring jakarta-ee dependency-injection inversion-of-control ioc-container


    【解决方案1】:

    据我所知,他们也是这样做的。 @Inject 是来自 javax.inject 的注解,它只是依赖注入的 API。在 Spring 中你可以同时使用两者,因为我认为 Spring 为 @Inject 提供了一个实现,它与 Spring 环境中的 @Autowired 做同样的事情。

    Matthias Wessendorf 在这里写了一篇博客:http://matthiaswessendorf.wordpress.com/2010/04/20/spring-3-0-and-jsr-330-part-2/

    【讨论】:

      【解决方案2】:

      阅读the documentation怎么样?

      JSR 330 的 @Inject 注解可以用来代替 Spring 的 @Autowired 在下面的示例中。 @Inject 没有必需的 属性与 Spring 的 @Autowired 注释不同,后者具有必需的 属性来指示注入的值是否是可选的。这 如果您的 JSR 330 JAR 在 类路径。

      【讨论】:

        【解决方案3】:

        我认为值得指出的是,如果你使用@Autowired,你正在创建一个对 Spring 的依赖,而使用@Inject,你将能够换出另一个支持JSR 330 的依赖注入框架。

        【讨论】:

        • 您在哪里需要更多说明?
        • 关于在 Spring 应用程序中使用 @Inject,如果这是一个问题或不好的做法?
        【解决方案4】:

        首先,@Autowired 是由 Spring Framework 定义的,但 @Inject 来自“Java 依赖注入”(JSR-330)”

        第二,@Inject 不采用 required 属性,因此如果找不到任何 bean,它将失败并出现错误,但 @Autowired 可以带有 required=false 并允许可为空的字段.

        第三,@Inject注解的好处是,与其直接注入引用,不如让@Inject注入Provider。 Provider 接口可以实现 bean 引用的延迟注入和 bean 的多个实例的注入。

        【讨论】:

          猜你喜欢
          • 2011-08-18
          • 2020-01-09
          • 1970-01-01
          • 2011-10-31
          • 2021-06-26
          • 2021-10-17
          • 1970-01-01
          • 2016-10-22
          相关资源
          最近更新 更多