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

Java 向OSGi JAX-RS资源添加方面,java,web-services,osgi,jax-rs,aop,Java,Web Services,Osgi,Jax Rs,Aop,我正在寻找一种在OSGI环境中向JAX-RS资源添加某些功能的方法。注释似乎是一种干净的方法,我在Spring框架中见过它(没有经验)。诸如@Transactional或(我想做的事情需要在用户上设置权限标志)@permission(CREATE)之类的注释。然而,我对如何在OSGI环境中实现这一点有点困惑 添加方面的正常方法(是吗?)是注册一个包装原始服务的方面服务。如果我查对了,JAX-RS资源将被跟踪并连接到HttpService。JAX-RS资源不实现接口,需要动态创建代理 我将如何动态

我正在寻找一种在OSGI环境中向JAX-RS资源添加某些功能的方法。注释似乎是一种干净的方法,我在Spring框架中见过它(没有经验)。诸如@Transactional或(我想做的事情需要在用户上设置权限标志)@permission(CREATE)之类的注释。然而,我对如何在OSGI环境中实现这一点有点困惑

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


我将如何动态生成OSGI方面服务/资源,从而有效地从将原始资源挂接到HttpService的JAX-RS跟踪器中隐藏原始资源?我对现有AOP框架没有任何经验,对AOP本身几乎一无所知。

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

但是,我有不同的看法。虽然这看起来很酷,但也很神奇。请参阅本文件中我写下原因的章节。该项目实现了您希望通过@Transactional annotation实现的逻辑,但它只使用功能接口

我认为最好使用lambda表达式来实现您想要的目标(参见链接后面的Java8示例)。如果不是Java8,您仍然可以使用匿名类(参见链接后面的JAVE7和上面的示例)。使用匿名类时,您的代码看起来会更难看,但您的代码的功能将非常清楚


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

使用这些助手的问题是,提供它们的服务总是必需的,而不是可选的——除非使用空服务。此外,我可以在接口规范上放置安全注释,但不能使用帮助程序。然而,如果我不能解决这个问题,这可能是我的解决方案。你是对的。需要这些服务。如果要跳过该行为,可以实现虚拟服务。然而,您将在stacktrace中看到虚拟实现,您将能够调试它,您将知道发生了什么。但是,使用注释时,您将不知道谁拾取了该注释,您将无法对其进行配置。如果两种不同的技术采用相同的注释并在类上进行编织,会怎么样?