当你使用标准注释时,你应该知道一些重要的特性是不可用的,如下表所示:
Spring | javax.inject.* | 限制说明 |
---|---|---|
@Autowired | @Inject | @Inject 没有 required 属性。可以用 Java 8 的 Optional 来代替。 |
@Component | @Named / @ManagedBean |
Jsr-330 没有提供可组合模型,只提供了识别命名组件的方法。 |
@Scope(“singleton”) |
@Singleton | JSR-330 的默认作用域就像 Spring 的多例。然而,为了与 Spring 的一般默认值保持一致,在 Spring 容器中声明的 JSR-330 Bean 默认是一个单体。为了使用单子以外的作用域,你应该使用 Spring 的@Scope 注解。Javax.inject 也提供了一个 @Scope 注解。尽管如此,这个只是为了用于创建你自己的注解。 |
@Qualifier | @Qualifier / @Named | javax.inject.Qualifier 只是一个用于构建自定义限定符的元注解。具体的字符串限定符(像 Spring 的@Qualifier 一样有一个值)可以通过javax.inject.Named.Qualifier 来关联。 |
@Value | - | 没有等价物 |
@Required | - | 没有等价物 |
@Lazy | - | 没有等价物 |
ObjectFactory | Provider | javax.inject.Provider 是 Spring 的 ObjectFactory 的直接替代品,只是 get() 方法的名字比较短。它也可以与 Spring 的 @Autowired 结合使用,或者与非注释的构造函数和 setter 方法结合使用。 |
:::tips 总的来说:在使用 Spring 的时候建议还是使用 Spring 自带的注解 :::