Spring AOP之 動態代理實例
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之 動態代理實例