3

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

4

1 回答 1

4

据我所知,没有办法从字节码中解构一些建议。如果您正在使用现有的增强字节码,我认为除了重新启动应用程序而不进行编织*之外,没有其他方法可以删除它。

如果您正在谈论进行设置以便可以删除它们 - 可能确实无法删除编织,但是您当然可以if (useWeavedCode)围绕所有内容添加全局检查,当然还可以添加该变量以及以适当方式修改它的方法(通过 JMX 公开、新的控制台命令、新的管理 JSP 页面等)。然后,如果您想阻止这种新行为,您可以使用这个新选项禁用它。

当然请注意,这实际上并没有删除代码,并且在禁用时会产生布尔参数查找的成本,但我认为不可能做得比这更好。

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

于 2010-07-14T22:38:37.813 回答