當前位置:編程學習大全網 - 編程語言 - 使用java語言,如何對壹個類中的靜態方法做切面編程?

使用java語言,如何對壹個類中的靜態方法做切面編程?

package?com.classloader.test;

import?java.lang.reflect.InvocationTargetException;

import?java.lang.reflect.Method;

import?java.lang.reflect.Modifier;

public?class?AOPCallStaticMehtod?{

private?CallBack?callBack;

public?AOPCallStaticMehtod(CallBack?callBack)?{

this.callBack?=?callBack;

}

public?static?interface?CallBack?{

void?before(Method?method);

void?after(Method?method,?Object?result);

}

@SuppressWarnings({?"unchecked",?"rawtypes"?})

public?Object?callMethod(Class?clazz,?String?methodName,?Class[]?parameterTypes,?Object[]?parameters)?{

Object?result?=?null;

try?{

Method?method?=?null;

if?(parameterTypes?==?null?||?parameterTypes.length?==?0)?{

method?=?clazz.getMethod(methodName);

if?(Modifier.isStatic(method.getModifiers()))?{

callBack.before(method);

result?=?method.invoke(null);

callBack.after(method,?result);

}else{

System.out.println("這不是壹個靜態方法");

}

}?else?{

method?=?clazz.getMethod(methodName,?parameterTypes);

if?(Modifier.isStatic(method.getModifiers()))?{

callBack.before(method);

result?=?method.invoke(null,?parameters);

callBack.after(method,?result);

}else{

System.out.println("這不是壹個靜態方法");

}

}

}?catch?(NoSuchMethodException?|?SecurityException?|?IllegalAccessException?|?IllegalArgumentException

|?InvocationTargetException?e)?{

if?(e?instanceof?NoSuchMethodException)?{

System.out.println("沒有這個方法");

}?else?{

System.out.println("call?is?error!");

}

}

return?result;

}

public?static?void?main(String[]?args)?{

CallBack?callBack?=?new?CallBack()?{

@Override

public?void?before(Method?method)?{

if(method.getName().equals("test1")?||?method.getName().equals("test2")){

System.out.println(method.getName()?+?"方法在調用之前被攔截,可以在這裏切面編程");

}

}

@Override

public?void?after(Method?method,?Object?result)?{

if(method.getName().equals("test1")?||?method.getName().equals("test2")){

System.out.println(method.getName()?+?"方法調用以後被攔截,可以在這裏切面編程");

System.out.println(method.getName()?+?"執行結果是:"?+?result);

System.out.println("-----------------------------------------");

}

}

};

AOPCallStaticMehtod?AOPCallStaticMehtod?=?new?AOPCallStaticMehtod(callBack);

AOPCallStaticMehtod.callMethod(Test.class,?"test1",?new?Class[]?{?String.class?},?new?Object[]?{?"ppppppppppp"?});

AOPCallStaticMehtod.callMethod(Test.class,?"test2",?null,?null);

}

}

class?Test?{

public?static?void?test1(String?aa)?{

System.out.println(aa);

}

public?static?String?test2()?{

System.out.println("fffffffffffffffff");

return?"test2?result";

}

}

  • 上一篇:零基礎如何找到平面設計插畫的工作-平面設計零基礎應該怎麽學
  • 下一篇:電腦專業有哪些
  • copyright 2024編程學習大全網