我正在寻找一种Java解决方案,它允许我在运行时使用AOP在已经运行的代码之上编织新的代码。关键是不需要重新启动JVM。此外,我希望在运行时删除编织,让旧代码以编织前的方式运行。
我认为AspectJ加载时编织+运行时类加载/卸载可以做到这一点。有人试过吗?有什么建议吗?谢谢。
发布于 2013-07-13 19:54:57
需要考虑的几件事:
话虽如此,您既可以尝试OSGi等概念,也可以编写自己的类加载器(或者在互联网上找到许多现有的类加载器),在单独的类加载器实例中加载每个类或每个JAR。这可能会变得非常复杂,所以您可能希望考虑这种简单的方法,只要它在您的情况的技术范围内:
if() pointcuts用于所有相关的通知,并提供了一种动态更改切入点使用的变量值的方法,以便能够动态地打开和关闭通知。性能开销通常是最小的,不用担心。在你说它太贵之前,先试一试。这个解决方案满足您的条件,即它可以动态地(取消)激活,并且在编织方面代码后不需要重新启动JVM。
发布于 2014-09-11 13:46:48
Aspect
a aspect是您正在实现的横切功能。它是您正在模块化的应用程序的方面或区域。最常见(尽管简单)的方面示例是日志记录。日志记录是整个应用程序都需要的东西。但是,由于应用程序往往根据功能被分解为多个层,因此通过继承重用日志记录模块
没有任何意义。但是,您可以创建一个日志记录方面,并使用AOP将其应用于整个应用程序。
编织
编织是将方面应用于目标对象以创建新的代理对象的过程。在指定的接合点将方面编织到目标对象中。编织可以在目标类的生命周期中的多个时间点发生:


发布于 2018-12-27 16:10:23
您可以实现一个ASM解决方案,允许在运行时(没有停机)在已经运行的代码上编织新的代码
使用ASM (https://www.baeldung.com/java-asm),
您可以使用相同的解决方案在运行时删除编织的
https://stackoverflow.com/questions/17323500
复制相似问题