- 動态代理和靜态代理角色一樣
- 動态代理和代理類是動态生成的,不是我們直接寫好的
-
動态代理分為兩大類:基于接口的動态代理、基于類的動态代理
基于接口-----JDK動态代理
基于類------cglib
Java位元組碼實作:javasist
Proxy類 (代理):
InvocationHandler(調用處理接口):
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//等會會用這個自動生成代理類
public class ProxyInvocationHandler implements InvocationHandler {
//被代理的類
private Object target;
public void setTarget(Object target) {
this.target = target;
}
//生成得到代理類
public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(),target.getClass().getInterfaces(),this);
}
//處理代理執行個體,并傳回結果
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
log(method.getName());
Object result = method.invoke(target,args);
return result;
}
public void log(String msg){
System.out.println("執行了"+msg+"方法");
}
}
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIwczX0xiRGZkRGZ0Xy9GbvNGL2EzXlpXazxSP9cWT4FkaOJTVE5EM4wmYwhGWhxGZzwEMW1mY1RzRapnTtxkb5ckYplTeMZTTINGMShUYfRHelRHLwEzX39GZhh2css2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xyayFWbyVGdhd3LcV2Zh1Wa9M3clN2byBXLzN3btg3Pn5GcuAjM2UTMxgTMzAzNwEjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)