我正在寻找JAX-RS(JSR-311)中的一种机制,以便我能够提炼出我的应用程序特有的一些横切关注点。例如,我的应用程序具有为每个请求查找或构建的特定上下文。我希望能够在集中的位置执行这种类型的逻辑,然后以某种方式附加到上下文,以供各种资源用于请求的其余部分。如果我只能为一些URL子集执行这些类型的操作,那就更好了。
JAX-RS为路径段,cookie,标题等提供的默认注入是很好的但是那些部分的自定义解释呢?我真的不想每次需要时都要构建它。我宁愿有办法指定它是如何构建的,然后只是将上下文组件作为资源方法的一部分注入。
是否存在任何此类挂钩?我可以操纵提供者模型来执行此操作吗?顺便说一下,我希望尽可能保持独立的实施(泽西,RESTEasy等)。
提前感谢任何见解。
答案 0 :(得分:0)
在某种类型的bizaro扭曲中,标准以一种奇妙的可组合方式协同工作(JAX-RS和CDI),IBM编写了一个可能涵盖我特定问题的教程。作为a larger tutorial on combining CDI and JAX-RS的一部分,本文专门讨论了使用CDI(Java上下文和依赖注入)装饰器和方法拦截器来实现JAX-RS资源中的横切关注点:
更新:我只能在 GlassFish 3.1 中使用它。密钥(我发现的所有示例都没有显示)是您必须确保CDI管理资源实例的生命周期(因此它可以使用拦截器进行包装)。实例化自己,然后在Application.getSingletons()方法中返回不起作用。
我要回去看看我是否也能把它带到Jetty。
更新2: Jetty(以及扩展可能是任何其他非J2EE servlet容器,如Tomcat)对于使用CDI进行设置是一种痛苦。我认为GlassFish是一个更容易的集成。这是一个博客,概述了Jetty所需的一些步骤:
答案 1 :(得分:0)
您可以使用ContextResolver
提供程序向资源或其他提供程序提供任何上下文。基本上,您需要为要注入的任何上下文实现javax.ws.rs.ext.ContextResolver<T>
。不要忘记用@Provider
注释并注册。