为什么JSR-330不能使用Jersey和Spring

时间:2016-07-18 06:44:29

标签: java spring jersey jsr330

我有一个带有@RequestScope的bean,当我将它注入我的一个单身时,它被注入一个单独而不是一个请求范围。但是,如果我将@RequestScope更改为@Scope( value = "request", scopeName = "request", proxyMode = ScopedProxyMode.TARGET_CLASS),Spring会将bean创建为请求范围,并将它们正确地注入单例。

我阅读了Spring关于此的文档:

  

JSR-330默认范围就像Spring的原型。但是,为了使其与Spring的一般默认值保持一致,默认情况下,Spring容器中声明的JSR-330 bean是一个单例。为了使用除单例之外的范围,您应该使用Spring的@Scope注释。 javax.inject还提供了@Scope注释。然而,这个仅用于创建自己的注释。

这是否意味着Spring真正忽略了@RequestScoped?是否有任何提供者/解析器可以解决Spring的这个问题?我希望尽可能使用@RequestScoped注释而不是@Scope注释spring,因为我们只需要使用JSR注释

http://docs.spring.io/spring/docs/4.2.5.RELEASE/spring-framework-reference/html/beans.html#beans-standard-annotations-limitations

1 个答案:

答案 0 :(得分:1)

正如M. Deinum所提到的,Spring并不支持@RequestScoped开箱即用。我必须创建一个ScopeMetadataResolver来将@RequestScoped转换为Spring @Scope

我在这里提到我的自定义解析器:

https://github.com/matzew/spring-cdi-bridge/blob/master/src/main/java/net/wessendorf/spring/scopes/CdiScopeMetadataResolver.java