JAX-RS 2.0的一个目标是整合CDI并用通用的@Inject
注入替换旧的@Context
。但是,如果我看一下JSR 339,里面没有提到这个。那么CDI集成实际上是什么呢?使用JAX-RS与CDI相比使用Google Guice有什么优势吗?
@Context
仍然是在JAX-RS 2.0中进行注入的官方方法。规范确实指出,一个实现可以在@Context
旁边使用@Inject
(来源于JAX-RS 2.0 EDR 3的第10.2.5节):
实现不得要求使用
@Inject
或@Resource
来触发JAX-RS注释字段或属性的注入。实现可以支持这种用法,但应警告用户非可移植性。
因此,并不确定JAX-RS 2.0的所有实现都支持@Inject
,如果想要更改JAX-RS 2.0实现可能会导致不兼容。
我做了一些研究,似乎Jersey 2.0至少已经支持@Inject
。
我猜使用@Inject
而不是@Context
的优点在于,它与JAX-RS Web服务中可能具有的所有非JAX-RS资源的所有@Inject
更一致。