在尝试使用OSGi中的单例资源嵌入RESTEasy时(使用与resteasy-osgi-bundle类似的东西),令我惊讶的是,现场注入@Context UriInfo可用并且在每个请求上都有效.
进一步挖掘我发现代理魔术和ThreadLocal在ResteasyProviderFactory.一切都很好,但我无法在docs中找到任何对这种行为的引用,既不是在RESTEasy中也不是在JAX-RS规范中.
在Jersey文档中,我们可以找到类似的内容:
特定请求对象存在例外,它甚至可以注入构造函数或类字段[ 具有单例范围的资源 - OP].对于这些对象,运行时将注入能够同时服务更多请求的代理.这些请求的对象是
HttpHeaders,Request,UriInfo,SecurityContext.可以使用@Context注释注入这些代理.
它在RESTEasy中看起来如何?目前的实施是稳定还是实验?可以注入单例的特定于请求的类的集合是什么?
Pau*_*tha 10
这不是实验性的.此行为(对于一组公共对象)在JAX-RS规范中指定.规范页面中没有任何锚点链接到某个部分,但您应该查看的内容是第5章:上下文.我会在这里发布一些片段.
5.1并发
上下文特定于特定请求,但某些JAX-RS组件(具有除每个请求之外的生命周期的提供程序和资源类)的实例可能需要支持多个并发请求.当注入5.2节中列出的类型之一的实例时,提供的实例必须能够为特定请求选择正确的上下文.使用线程本地代理是实现此目的的常用方法.
5.2上下文类型
本节描述资源类,提供程序和
Application子类可用的上下文类型.5.2.1申请
Application可以使用@Context注释将应用程序提供的子类的实例注入到类字段或方法参数中.访问Application子类实例允许将配置信息集中在该类中.请注意,这不能注入Application子类本身,因为这会创建循环依赖项.5.2.2 URI和URI模板
UriInfo可以使用@Context注释将实例注入到类字段或方法参数中.UriInfo提供有关请求URI组件的静态和动态每请求信息.例如,以下内容将返回请求中任何查询参数的名称:5.2.3标题
HttpHeaders可以使用@Context注释将实例注入到类字段或方法参数中.HttpHeaders提供对地图形式或强类型方便方法的请求标头信息的访问.例如,以下内容将返回请求中所有标头的名称:5.2.4内容谈判和前提条件
JAX-RS使用该
Request接口简化了对内容协商和前提条件的支持.Request可以使用@Context注释将实例注入到类字段或方法参数中.的方法Request允许呼叫者,以确定最佳匹配表示变种,并评估资源的当前状态是否在请求任何先决条件匹配...5.2.5安全上下文
该
SecurityContext接口提供对当前请求的安全上下文的信息的访问.SecurityContext可以使用@Context注释将实例注入到类字段或方法参数中.SecurityContext提供对当前用户主体的访问的方法,关于请求者所承担的角色的信息,请求是否通过安全信道到达以及使用的认证方案.5.2.6提供商
该
Providers接口允许基于一组搜索条件查找提供者实例.Providers可以使用@Context注释将实例注入到类字段或方法参数中.
需要注意的一点是,可以注入更多类型,但上面未列出的任何类型都是特定于实现的.以下是第15章@Context中 RESTeasy文档的列表
该
@Context注解允许你注入的情况下javax.ws.rs.core.HttpHeaders,javax.ws.rs.core.UriInfo,javax.ws.rs.core.Request,javax.servlet.HttpServletRequest,javax.servlet.HttpServletResponse,javax.servlet.ServletConfig,javax.servlet.ServletContext,和javax.ws.rs.core.SecurityContext对象.
虽然文档没有对字段和参数注入做任何区分,但从我记忆中来看,我认为我能够HttpServletRequest注入一个字段.但我会测试它们以确保.
| 归档时间: |
|
| 查看次数: |
2982 次 |
| 最近记录: |