3.11.3 JSR-330标准注解的限制
使用标准注解时,重要的是要知道哪些重要功能不可用,如下表所示:
Table 3.6. Spring组件模型元素vs. JSR-330变体
Spring | javax.inject.* | javax.inject的局限性 |
---|---|---|
@Autowired | @Inject | @Inject没有require属性,可以使用Java 8的Optional代替。 |
@Component | @Named / @ManagedBean | JSR-330没有提供组合模型,仅仅只是一种标识组件的方式 |
@Scope("singleton") | @Singleton | JSR-330默认的作用域类似于Spring的prototype 。然而,为了与Spring一般的配置的默认值保持一致,JSR-330配置的bean在Spring中默认为singleton 。为了使用singleton以外的作用域,必须使用Spring的@Scope注解。javax.inject也提供了一个@Scope注解,不过这仅仅被用于创建自己的注解。 |
@Qualifier | @Qualifier / @Named | javax.inject.Qualifier 仅使用创建自定义的限定符。可以通过javax.inject.Named 创建与Spring中@Qualifier 一样的限定符 |
@Value | - | 无 |
@Required | - | 无 |
@Lazy | - | 无 |
ObjectFactory | Provider | javax.inject.Provider 是对Spring的ObjectFactory 的直接替代,仅仅使用简短的get() 方法即可。它也可以与Spring的@Autowired 或无注解的构造方法和setter方法一起使用。 |