Java 如何使用ApacheFelix在OSGi中归档AOP

Java 如何使用ApacheFelix在OSGi中归档AOP,java,osgi,aop,aspectj,bnd,Java,Osgi,Aop,Aspectj,Bnd,我目前正在从事一个OSGi项目,其中一些部分非常适合AOP编程。由于没有很多AOP与OSGi结合的经验,我想知道如何在OSGi环境中最好地实现AOP?我读过一些关于这个问题的文章,但没有找到一个适合我的解决方案。例如,AspectJ有一个Equinox孵化器项目,但最后一次构建是在2008年。但由于我使用的是ApacheFelix和Bnd(工具),所以我希望避免使用Equinox中的东西。顺便说一句,编织过程的一个要求是它应该在编译时,也可能在稍后的加载时。此外,我正在使用Ant和Bnd构建我的

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

希望有人能分享这样一个用例的经验

编辑

迄今为止的总结:

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

    • 我想你可以看看白羊座的JPA。最近在那里增加了加载时间编织。在较新的OSGi规范中似乎也有一个编织钩子。因此,现在支持AspectJ和类似的东西是完全可能的。不过,我还没有看到它在起作用

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

      我想你可以看看白羊座JPA。最近在那里增加了加载时间编织。在较新的OSGi规范中似乎也有一个编织钩子。因此,现在支持AspectJ和类似的东西是完全可能的。不过,我还没有看到它在起作用

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

      hi Christian。谢谢你的回复。在我看来,Aries更适合于使用数据源的JPA用例。但老实说,它可能解决了另一个问题,所以尽管如此,还是请您提一下;)关于AOP:我想使用它的一个例子是许多标准的日志记录过程。此外,一些安全问题也与之完美匹配。当然,我可以不使用方面来解决它,但是避免冗余/错误代码将是一件好事。但你是对的,我必须小心不要过度使用AOP。我强烈建议不要使用完全AOP,因为它很容易失控。非常有效的方法是在使用接口注入的类上使用方面。在这种情况下,您可以使用动态代理而不是字节码操作。例如,spring允许在接口边界上执行安全、日志和事务。这在OSGi中也非常有效。就我个人而言,我从来都不需要使用更多的东西。唯一的例外是jpa,但对于这些情况有专门的lib。您能提供一个链接以获得更多描述吗?对于spring dm,它基本上只是spring文档中描述的正常配置。参见第6.1.3章,他们描述了spring默认使用动态代理。这些在OSGi中非常有用,因为它们不需要编织。最后几天,我试图支持您使用Spring AOP的建议。首先,它看起来不错,因为它不是直接的AOP,正如您前面提到的,Spring使用动态代理。但是它在没有bean类方面有一些限制。在我的例子中,我不想向我的环境中添加完整的Spring支持,所以我不想有bean规范和一些定义它们的xml。所以我想,春天不是我想要的。你还有其他建议吗?嗨,克里斯蒂安。谢谢你的回复。在我看来,Aries更适合于使用数据源的JPA用例。但老实说,它可能解决了另一个问题,所以尽管如此,还是请您提一下;)关于AOP:我想使用它的一个例子是许多标准的日志记录过程。此外,一些安全问题也与之完美匹配。当然,我可以不使用方面来解决它,但是避免冗余/错误代码将是一件好事。但你是对的,我必须小心不要过度使用AOP。我强烈建议不要使用完全AOP,因为它很容易失控。非常有效的方法是在使用接口注入的类上使用方面。在这种情况下,您可以使用动态代理而不是字节码操作。例如,spring允许在接口边界上执行安全、日志和事务。这在OSGi中也非常有效。就我个人而言,我从来都不需要使用更多的东西。唯一的例外是jpa,但对于这些情况有专门的lib。您能提供一个链接以获得更多描述吗?对于spring dm,它基本上只是spring文档中描述的正常配置。参见第6.1.3章,他们描述了spring默认使用动态代理。这些在OSGi中非常有用,因为它们不需要编织。最后几天,我试图支持您使用Spring AOP的建议。首先,它看起来不错,因为它不是直接的AOP,正如您前面提到的,Spring使用动态代理。但是它在没有bean类方面有一些限制。在我的例子中,我不想向我的环境中添加完整的Spring支持,所以我不想有bean规范和一些定义它们的xml。所以我想,春天不是我想要的。你还有其他建议给我吗?