簡體   English   中英

Java - 在給定類的每個方法中插入 println()

[英]Java - insert println() in each method of given class

我創建了一個 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);
}

對於這種情況和類似情況,我們不會更新每個函數以添加 println,我們通常使用稱為AOP(面向方面​​編程)的東西

AOP是一種有用的技術,它可以在不顯式更改源代碼的情況下將可執行塊添加到源代碼中。 在我們的示例中,我們不想在類中記錄方法執行。 相反,我們希望某個其他類攔截對方法 power() 的每次調用,測量其執行時間並將此信息發送到 slf4j。

請閱讀本文以獲取更多詳細信息aop-aspectj-java-method-logginglogging-with-aop-in-spring

AOP使您能夠攔截方法執行並在執行之前、之后或周圍添加邏輯,因此在您的情況下,您可以在執行之前添加攔截器並打印所需的 msg。

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()獲取所有方法參數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM