我有一个java程序。我想截取每个函数入口并退出并记录它们,而不更改现有的(~5k)函数体。
我知道AspectJ和Spring AOP适用于此。但不幸的是,我不允许在目标系统上使用它们(这不是我的决定)。
一种可能性是使用以下内容:
void func()
{
logger.logEntry();
// here stuff
logger.logExit();
}
如何在没有任何第三方组件/工具的情况下实现 (这非常重要!),而无需插入这些提到的额外痕迹?是否有任何Java接口/抽象类或可用于此目的的任何其他方法/可能性?或者任何事件处理程序/子程序等?
当我用Google搜索时,我发现只有第三方解决方案。
如果调用带有2个抽象函数的抽象类,如果调用from扩展类的方法的函数,那么最好的灵魂是什么。像这样:
public abstract class InterceptFunctionCalls
{
// here the internal stuff that call the following methods below
protected abstract void EnteredFunction(String func);
protected abstract void ExitedFunction(String func);
}
答案 0 :(得分:2)
是否有任何Java接口/抽象类或任何其他类 可用于此目的的方法/可能性?
不......这就是为什么有些第三方决定出现并满足需求。 Java作为未扩展的语言并不试图提供AOP。