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方法一起使用。 |