子类代理,接口代理

1、JDK动态代理
 java.lang.reflect.InvocationHandler 调用处理器
java.lang.reflect.Proxy 代理类的父类,是所有jdk代理类的父类
JDK代理类是接口代理,因为它继承了proxy这个类,java是单继承的
jdk代理类通过调用处理器中的invoke方法来实现动态代理的目的,
invoke签名,
public Object invoke(Object proxy,Method method,Object[] args);
proxy 代理实例,method 接口方法的Method实例,args 调用方法的参数数组

代理实例创建
 Proxy.newProxyInstance(ClassLoader loader,Class<?>[] interfaces,InvocationHandler handler);
loader 代理类的类加裁器,interfaces 代理类要实现的接口列表,handler 调用处理器

实现过程
 1),实现一个调用处理器,这个自定义调用处理器传入一个目标对象target,在invoke方法
  method.invoke(target,args);这个语句前后加入要织入的代码,比如事务、日志
2),构造代理类和代理实例,传入所需参数。调用方法。

说明:若method.invoke(proxy,args);会出现java.lang.StackOverFlowError错误,

2、cglib动态代理
cglib是子类代理,cglib性能要比jdk好,但创建代理对象时,jdk比cglib效率高,
net.sf.cglib.proxy.MethodInterceptor
net.sf.cglib.proxy.MethodProxy
net.sf.cglib.proxy.Enhancer

你可能感兴趣的:(java,jdk,.net)