java动态代理--代理接口无实现类

    xiaoxiao2021-12-14  19

    使用通过接口定义,或解析接口注解等完成相关功能,如mybatis的SqlSession.getMapper的实现

    1.接口定义

    [java]  view plain  copy  print ? package cn.proxy;      public interface IHello {       String say(String aa);   }   2.代理实现

    [java]  view plain  copy  print ? package cn.proxy;      import java.lang.reflect.InvocationHandler;   import java.lang.reflect.Method;   import java.lang.reflect.Proxy;      /**   *  JDK动态代理代理类    *   */   @SuppressWarnings("unchecked")   public class FacadeProxy implements InvocationHandler {         @Override         public Object invoke(Object proxy, Method method, Object[] args)                 throws Throwable {             System.out.println("接口方法调用开始");             //执行方法             System.out.println("method toGenericString:"+method.toGenericString());           System.out.println("method name:"+method.getName());           System.out.println("method args:"+(String)args[0]);           System.out.println("接口方法调用结束");             return "调用返回值";         }                public static <T> T newMapperProxy(Class<T> mapperInterface) {           ClassLoader classLoader = mapperInterface.getClassLoader();           Class<?>[] interfaces = new Class[]{mapperInterface};           FacadeProxy proxy = new FacadeProxy();           return (T) Proxy.newProxyInstance(classLoader, interfaces, proxy);         }   }  

    4.运行

    [java]  view plain  copy  print ? package cn.proxy;      public class Test {       public static void main(String[] args) {           IHello hello = FacadeProxy.newMapperProxy(IHello.class);           System.out.println(hello.say("hello world"));       }   }   运行结果:

    [plain]  view plain  copy  print ? 接口方法调用开始   method toGenericString:public abstract java.lang.String cn.proxy.IHello.say(java.lang.String)   method name:say   method args:hello world   接口方法调用结束   调用返回值  
    转载请注明原文地址: https://ju.6miu.com/read-963321.html

    最新回复(0)