【问题标题】:How to archieve AOP in OSGi with Apache Felix如何使用 Apache Felix 在 OSGi 中归档 AOP
【发布时间】:2012-07-03 08:40:53
【问题描述】:

我目前正在开发一个 OSGi 项目,其中某些部分非常适合 AOP 编程。没有很多 AOP 结合 OSGi 的经验,我想知道如何在 OSGi 环境中最好地做 AOP?我已经阅读了一些关于这个问题的文章,但没有找到适合我的解决方案。例如,AspectJ 有一个 Equinox Incubator 项目,但最后一次构建是在 2008 年。但由于我使用的是 Apache Felix 和 Bnd(tools),所以我想避免使用 Equinox 的某些东西。顺便说一句,编织过程的一个要求是它应该在编译时,也可能在稍后的加载时。此外,我正在使用 Ant 和 Bnd 来构建我的包。因此,如果我也可以将 Aspectj 集成到此构建过程中,那就太好了。

希望有人可以分享这种用例的经验。

编辑

到目前为止的总结:

  • Christian Schneider 在他的回答中提到了使用 Spring AOP 的可能性(但可惜不是我要找的)

【问题讨论】:

    标签: java osgi aop aspectj bnd


    【解决方案1】:

    我想你可以看看 Aries JPA。最近在那里添加了加载时间编织。似乎在较新的 OSGi 规范中也有一个编织钩子。所以现在支持 AspectJ 等可能是完全可能的。不过我还没有看到它的实际效果。

    当然是一个大问题。为什么需要 AOP,你想用它做什么? 一般来说,在大多数情况下,AOP 看起来比实际更简单,并且给您带来的好处比您最初想象的要多。所以我的建议是在过度使用 AOP 之前要小心并三思而后行。

    【讨论】:

    • 嗨,克里斯蒂安。谢谢你的回复。在我看来,Aries 更适合您使用数据源的 JPA 用例。但老实说,也许它解决了另一个问题,所以还是要提一下 ;) 关于 AOP:我想使用它的一种情况是许多标准的日志记录过程。此外,一些安全问题也非常适合它。当然,我可以在不使用方面的情况下解决它,但是避免冗余/错误代码会很棒。但你是对的,我必须小心不要过度使用 AOP。
    • 我强烈建议不要使用完整的 AOP,因为它很容易失控。效果很好的是在使用接口注入的类上使用方面。在这种情况下,您可以使用动态代理而不是字节码操作。例如,spring 允许在接口边界上进行安全、日志记录和事务。这在 OSGi 中也很有效。我个人从来不需要使用更多。唯一的例外是 jpa,但针对这些情况有专门的库。
    • 能否提供更多描述的链接?
    • 对于 spring dm,它基本上只是 spring 文档中描述的正常配置。请参阅static.springsource.org/spring/docs/2.5.x/reference/aop.html 在第 6.1.3 章中,他们描述了 spring 默认使用动态代理。这些在 OSGi 中工作得很好,因为它们不需要编织。
    • 嗨。最近几天,我试图支持您使用 Spring AOP 的建议。首先它看起来不错,因为它不是直接的 AOP,Spring 使用您之前提到的动态代理。但是它在没有 bean 类方面有一些限制。就我而言,我不想为我的环境添加完整的 Spring 支持,所以我不想拥有 bean 规范和一些定义它们的 xml。所以我认为,春天不是我想要的。你对我还有其他建议吗?
    猜你喜欢
    • 2016-10-13
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 2010-12-25
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 2015-04-12
    相关资源
    最近更新 更多