JDK动态代理

 动态代理和静态代理的区别
     静态代理:代理类已经写好放在那了 - -
     动态代理:代理类由程序生成。

 JDK动态代理和cglib:cglib比较灵活。JDK代理限制比较死,必须有实现了接口的实体类。
 cglib使用方式见:cglib动态代理的使用方式

 普通接口类:

 public interface Interface {

     public boolean check();
 }

 实现类

 public class Demo implements Interface {

     public boolean check() {
         return true;
     }
 }

 动态代理类

 /* 动态代理类 */
 public class Interceptor implements InvocationHandler {

    @Override
    public Object invoke(Object proxy, Method method, Object[] params) throws Throwable {

         /* 这个方法里实现具体的各种处理 */
         ...

         /* 调用原方法 */        
         return method.invoke(proxy, args);
     }
 }

 创建对象调用

 /* 类加载器 */
 ClassLoader loader = Demo.class.getClassLoader();
 /* 主要是这个限制,必须有实现类 */
 Class<?>[] clas = Demo.class.getInterfaces();
 /* 强转的时候,不能转成Demo类,只能转成接口类 */    
 Interface i = (Interface) Proxy.newProxyInstance(loader, clas, new Interceptor());

 /* 调用的时候,会进入Interceptor.invoke()方法进行处理 */
 i.check();

你可能感兴趣的:(JDK动态代理)