前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >java动态代理--代理接口无实现类

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

作者头像
allsmallpig
发布2021-02-25 10:29:53
7130
发布2021-02-25 10:29:53
举报
文章被收录于专栏:allsmallpi博客

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

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

1.接口定义

[java] view plain copy

  1. package cn.proxy;  
  2. public interface IHello {  
  3.     String say(String aa);  
  4. }  

2.代理实现

[java] view plain copy

  1. package cn.proxy;  
  2. import java.lang.reflect.InvocationHandler;  
  3. import java.lang.reflect.Method;  
  4. import java.lang.reflect.Proxy;  
  5. /**
  6.  *  JDK动态代理代理类 
  7.  *
  8.  */
  9. @SuppressWarnings("unchecked")  
  10. public class FacadeProxy implements InvocationHandler {    
  11. @Override
  12. public Object invoke(Object proxy, Method method, Object[] args)    
  13. throws Throwable {    
  14.         System.out.println("接口方法调用开始");    
  15. //执行方法  
  16.         System.out.println("method toGenericString:"+method.toGenericString());  
  17.         System.out.println("method name:"+method.getName());  
  18.         System.out.println("method args:"+(String)args[0]);  
  19.         System.out.println("接口方法调用结束");    
  20. return "调用返回值";    
  21.     }    
  22. public static  T newMapperProxy(Class mapperInterface) {  
  23.         ClassLoader classLoader = mapperInterface.getClassLoader();  
  24.         Class[] interfaces = new Class[]{mapperInterface};  
  25.         FacadeProxy proxy = new FacadeProxy();  
  26. return (T) Proxy.newProxyInstance(classLoader, interfaces, proxy);  
  27.       }  
  28. }  

4.运行

[java] view plain copy

  1. package cn.proxy;  
  2. public class Test {  
  3. public static void main(String[] args) {  
  4.         IHello hello = FacadeProxy.newMapperProxy(IHello.class);  
  5.         System.out.println(hello.say("hello world"));  
  6.     }  
  7. }  

运行结果:

[plain] view plain copy

  1. 接口方法调用开始  
  2. method toGenericString:public abstract java.lang.String cn.proxy.IHello.say(java.lang.String)  
  3. method name:say  
  4. method args:hello world  
  5. 接口方法调用结束  
  6. 调用返回值  
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018/01/30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档