java - 向 OSGi JAX-RS 资源添加方面

标签 java web-services osgi jax-rs aop

我正在寻找一种方法来向 OSGI 环境中的 JAX-RS 资源添加某些功能。注释似乎是一种干净的方法来做到这一点,我已经在 Spring 框架中看到了它的完成(没有经验)。诸如 @Transactional 之类的注释,或者(我想做的,需要在用户上设置权限标志)@Permission(CREATE)。然而,我对如何在 OSGI 环境中执行此操作有点困惑。

添加方面的正常方法(是吗?)是注册包装原始服务的方面服务。如果我查对了,JAX-RS 资源会被跟踪并连接到 HttpService。 JAX-RS 资源不实现接口(interface),需要动态创建代理。

我如何动态生成 OSGI 方面服务/资源,以有效地隐藏原始资源,使其不被 JAX-RS 跟踪器挂接到 HttpService?我对现有 AOP 框架的经验为零,对 AOP 本身几乎一无所知。

最佳答案

在 Java EE 和 Spring 世界中,使用拦截器并基于注释定义附加行为是很常见的。 OSGi中也有一些解决方案,有一个RFP支持EJB注释。

不过,我有不同的看法。虽然这看起来很酷,但它也很神奇。请参阅"Why not annotations, interceptors and other magic?"这一章README我写下原因的文件。该项目实现了您希望通过@Transactional 注解实现的逻辑,但它仅使用函数式接口(interface)。

我认为最好用 lambda 表达式来思考以实现您想要的目标(请参阅链接后面的 java 8 示例)。如果不是 Java 8,您仍然可以使用匿名类(请参阅链接后面的 jave 7 和上面的示例)。使用匿名类,您的代码看起来会更难看,但您的代码的作用会非常清楚。

其他人可能不喜欢我的回答。三年前,我是注释扫描、编织和拦截器的最大粉丝之一。经过几次头痛之后,我成为了这个“神奇”概念的敌人。

关于java - 向 OSGi JAX-RS 资源添加方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23654067/

相关文章:

node.js - 如何检查 Nodejs 中的 url(或 Web 服务)是否存在?

osgi - 如何将 SpringSource dm 服务器集成到另一个基于 OSGi 的应用程序服务器中?

java - 算法 HmacPBESHA256 不可用(Flutter 构建失败)

android - 如何使用 Eclipse Indigo 在 Android 中导入 Web 服务引用?

android - 如何将 JSON 数据作为参数从 Android 发送到 Jersey RESTful 服务

java - OSGi 容器中的 RMI 客户端

java - 停止使用的服务包时会发生什么

java - Android HttpClient 和 Cookie

java - 在 C++ 中怎么说 != 0-9

java - 是否可以在外部文件中为 Spring Framework 指定类名?