如何在不重新启动程序的情况下禁用AspectJ?

时间:2010-07-14 22:32:06

标签: java aop aspectj

我有一个应用程序使用AspectJ和加载时间编织来建议各种方法。我想在我的程序中放置一个开关来禁用方面,而不必更改任何源代码或重新启动程序。关闭时,它需要尽可能少的开销。谢谢!

1 个答案:

答案 0 :(得分:4)

据我所知, un 无法从字节码中编织一些建议。如果您正在使用现有的增强字节码,除了在没有编织*的情况下重新启动应用程序之外,我不相信有任何方法可以删除它。

如果您正在讨论设置以便将其删除 - 可能无法删除,但您可以添加全局if (useWeavedCode)检查所有这些,当然还要添加该变量以及以适当的方式修改它的方法(通过JMX公开,新的控制台命令,新的管理JSP页面等)。然后,如果要阻止此新行为,可以使用此新选项禁用它。

当然注意,这实际上并没有删除代码,并且导致了布尔值的代价 参数查找虽然被禁用,但我认为不可能做得更好。

*严格来说,您需要再次加载类,因此您不需要重新启动应用程序,但实际上这可能是您可以使用的最简单的选项,除非您之前已将挂钩放入类加载器中。 / p>