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

问题描述 投票:-5回答:1

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

这是一个带有println()行的示例方法:

private final PreparedStatement statement;

@Override
public void setNull(int parameterIndex, int sqlType) throws SQLException {
    System.out.println("setNull: parameterIndex=" + ", sqlType" + sqlType);
    statement.setNull(parameterIndex, sqlType);
}
java regex delegates
1个回答
3
投票

对于这种情况和类似情况,我们没有更新每个函数来添加println,我们通常使用一些名为AOP(Aspect Oriented Programming)的东西。

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

请阅读本文了解更多详情aop-aspectj-java-method-logginglogging-with-aop-in-spring

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()获取所有方法arags

© www.soinside.com 2019 - 2024. All rights reserved.