AOP典型應用 自動列印方法引數與返回值

2021-06-22 22:44:32 字數 1362 閱讀 9832

專案進入整合測試階段後,除錯的時候有個問題:

發生bug時,因為問題發生時環境的複雜性,輸入、輸出難以復現。

這個問題是乙個典型的aop應用場景。

使用aop,可以在有2個方面提高工程效率:

1.統一處理輸入、輸出log,解耦引數log模組與具體的業務模組,避免在每個方法呼叫中寫一堆邏輯相似的手動新增log**,引數log模組有變更時不用逐個修改手工寫的log**,提高整個系統的可維護性;

2.保證log輸出格式的統一性,方便編寫自動化工具分析日誌、自動報警,提高系統維護效率。

題外話:其它適合使用aop的場景,也都能從上面2個方面得到工程效率的提公升。

主要**:

***:

import org.aopalliance.intercept.methodinterceptor;

import org.aopalliance.intercept.methodinvocation;

import org.slf4j.logger;

import org.slf4j.logge***ctory;

@singleton

public class inoutlogger implements methodinterceptor

public void setisprint(boolean isprint)

@override

public object invoke(methodinvocation mi) throws throwable else

}private object invokewithlogging(methodinvocation mi) throws throwable , elapsed time (ms): {}", mi.getmethod().getname(), (system.currenttimemillis() - starttime));

object args = mi.getarguments();

if (null != args && args.length > 0) ]: {}" ,i, args[i]);}}

logger.info("returns:{}", obj);

return obj;}}

用於標識需要攔截類的annotation:

@retention(retentionpolicy.runtime)

@target(elementtype.type)

public @inte***ce inoutlogging

***的使用:

bindinterceptor(matchers.annotatedwith(inoutlogging.class), matchers.any(), new inoutlogger());

vagrant provision 典型應用場景

讓虛擬機器初始建立時,新增自定義的包管理器的源。如本例中的 我的虛擬機器工作目錄是 users pollyduan vm 虛擬機器工作目錄為 users pollyduan vm ubuntu 我建立了乙個 users pollyduan vm data 作為儲存共享所需的軟體和資源。provisi...

策略模式典型應用

filenamefilter 這個介面,它在 io 包下面。這個介面只有乙個方法。boolean accept file dir,string name 這個方法只有乙個用處,就是給 file 類裡面的 list 方法呼叫。public string list filenamefilter filt...

介面的典型應用

老師和學生案例,加入抽菸的額外功能 分析 從具體到抽象 老師 姓名,年齡,吃飯,睡覺 學生 姓名,年齡,吃飯,睡覺 由於有共性功能,我們提取出乙個父類,人類。人類 姓名,年齡 吃飯 睡覺 抽菸的額外功能不是人或者老師,或者學生一開始就應該具備的,所以,我們把它定義為介面 抽菸介面。部分老師抽菸 實現...