Java-在给定类的每个方法中插入println()

Java-在给定类的每个方法中插入println(),java,regex,delegates,Java,Regex,Delegates,我创建了一个java类,它将所有调用委托给另一个类。 我希望在每个方法调用上,程序将输出一些信息-方法名称和参数。 该类中有很多方法,所以我不想手动在每个方法中插入System.out.println()。 有没有办法用正则表达式来做呢 下面是一个带有所需println()行的示例方法: 对于这种情况和类似情况,我们不会更新每个函数来添加println,我们通常使用称为AOP(面向方面编程)的东西 AOP是一种有用的技术,它可以在不显式更改源代码的情况下将可执行块添加到源代码中。在我们的示例中,

我创建了一个java类,它将所有调用委托给另一个类。 我希望在每个方法调用上,程序将输出一些信息-方法名称和参数。 该类中有很多方法,所以我不想手动在每个方法中插入
System.out.println()
。 有没有办法用正则表达式来做呢

下面是一个带有所需println()行的示例方法


对于这种情况和类似情况,我们不会更新每个函数来添加println,我们通常使用称为AOP(面向方面编程)的东西

AOP是一种有用的技术,它可以在不显式更改源代码的情况下将可执行块添加到源代码中。在我们的示例中,我们不希望在类内记录方法执行。相反,我们希望其他一些类拦截对方法power()的每次调用,测量其执行时间并将此信息发送给slf4j

请阅读本文以了解更多详细信息

AOP使您能够截取方法执行,并在执行之前、之后或前后添加逻辑,因此在您的情况下,您可以添加执行之前截取器并打印所需的消息

AOP示例:

@Aspect
public class MyLogger {

    private Logger log = Logger.getLogger(getClass());

    @before("execution(* *(..))") // after execution of any function 
    public void log(JoinPoint point) {
      System.out.println(point.getSignature().getName() + " called...");
    }
} 

您还可以使用
point.getArgs()
获取所有方法arag

Regex?你知道如何使用正则表达式吗?这听起来更像是胡安卡洛斯门多萨。当他说regex XD时,我笑得倒在地板上。regex跟这有什么关系?但是,是的,你应该调查AOP。投票以重复的方式结束,因为已经有很多了。@CardinalSystem的可能重复很高兴让你这么高兴。
@Aspect
public class MyLogger {

    private Logger log = Logger.getLogger(getClass());

    @before("execution(* *(..))") // after execution of any function 
    public void log(JoinPoint point) {
      System.out.println(point.getSignature().getName() + " called...");
    }
}