靜態代理:
靜態代理實現:
定義接口--定義目標類-定義切面類-定義代理類
代理類實現接口,實現了目標類的方法,調用切面類的方法
靜態代理的特點:
在不改變目標類的基礎上,擴展了目標類的功能
靜態代理的缺點:
隨着業務的發展,代理類的數量會不斷增加,接口中的方法增加,需要修改目標類和代理類的方法
動態代理:
動態代理的實現:
定義接口--定義目標類-定義切面類-定義動態代理的輔助類。
輔助類實現InvocationHandler接口
1)//獲取動態代理類的對象
/**
* 生成代理類對象
* arg0:代理目標類的類加載器
* arg1:代理目標類的接口對象
* arg2:實現了InvocationHandler接口的對象
*/
public Object getProxy(){
return Proxy.newProxyInstance(StudentService.class.getClassLoader(),StudentService.class.getInterfaces(), this);
}
2)//調用目標類的方法
/**
* 調用目標類的方法
*/
public Object invoke(Object obj, Method method, Object[] args)
throws Throwable {
studentAop.log();//模擬前置通知
obj=method.invoke(service, args);
return null;
}