1. 程式人生 > >Spring AOP之 動態代理實例

Spring AOP之 動態代理實例

delete 日誌 實現類 imp exc print cati user ins

1.項目結構圖如下3.3.3.1:

圖3.3.3.1技術分享

2.IUserServ接口代碼與UserServImpl實現類代碼和上述代碼相同

3.LogHandler類代碼

public class LogHandler implements InvocationHandler {

//目標對象

private Object targetObject;

/**

* 創建動態代理類

* @return object(代理類)

*/

public Object createProxy(Object targetObject){

this.targetObject = targetObject;

return Proxy.newProxyInstance(

targetObject.getClass().getClassLoader(),

targetObject.getClass().getInterfaces(), this);

}

@Override

public Object invoke(Object proxy, Method method, Object[] args)

throws Throwable {

Object obj = null;

try {

beforeLog();

//obj: 目標對象--->代理對象的返回值--->返回給調用者的信息

//this.invoke("目標對象","代理對象給目標對象傳遞參數");

//調用目標對象中方法

obj = method.invoke(targetObject, args);

afterLog();

} catch (Exception e) {

e.printStackTrace();

}

return obj;

}

//日誌管理方法

private void beforeLog(){

System.out.println("開始執行");

}

private void afterLog(){

System.out.println("執行完畢");

}

}

4. ActionTest測試類代碼:

public class ActionTest {

public static void main(String[] args) {

//創建代理對象iuserServ

LogHandler handler = new LogHandler();

IUserServ iuserServ = (IUserServ)handler.createProxy(new UserServImpl());

iuserServ.deleteUserById(new User());

}

}

5. 運行結果:
開始執行
******執行刪除方法******
執行完畢

Spring AOP之 動態代理實例