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

来源:互联网 发布:head first java 目录 编辑:程序博客网 时间:2024/05/22 15:50

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

  1. 接口定义
package cn.proxy;  public interface IHello {      String say(String aa);  }  
  1. 代理实现
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);        }  }  
  1. 运行
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"));      }  }  
  1. 运行结果
接口方法调用开始  method toGenericString:public abstract java.lang.String cn.proxy.IHello.say(java.lang.String)  method name:say  method args:hello world  接口方法调用结束  调用返回值 

转载于http://blog.csdn.net/zhu_tianwei/article/details/40076391

1 0