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

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

作者头像
allsmallpig
发布于 2021-02-25 02:29:53
发布于 2021-02-25 02:29:53
7200
举报
文章被收录于专栏:allsmallpi博客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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java 动态代理 原理解析
概要 AOP的拦截功能是由java中的动态代理来实现的。说白了,就是在目标类的基础上增加切面逻辑,生成增强的目标类(该切面逻辑或者在目标类函数执行之前,或者目标类函数执行之后,或者在目标类函数抛出异常时候执行。Spring中的动态代理是使用Cglib进行实现的。我们这里分析的是JDK中的动态代理实现机制。 下面我们通过例子快速了解JDK中的动态代理实现方式。 示例 需要代理的接口 public interface IHello { public void sayHello(); } 需要代理的类 p
java404
2018/05/18
6810
java动态代理的实现
类装载器类,将类的字节码装载到 Java 虚拟机(JVM)中并为其定义类对象,然后该类才能被使用。Proxy类与普通类的唯一区别就是其字节码是由 JVM 在运行时动态生成的而非预存在于任何一个 .class 文件中。 每次生成动态代理类对象时都需要指定一个类装载器对象:newProxyInstance()方法第一个参数
leobhao
2022/06/28
3170
JDK动态代理实现原理(jdk8)
天天的都听到人们说JDK动态代理,听上去感觉好屌的样子,为什么要叫JDK动态代理?
Java栈
2019/07/28
1.1K0
Java动态代理机制详解
Java后端工程师
2017/12/07
1.2K0
Java动态代理(JDK和cglib)
JAVA的动态代理 代理模式 代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。
java干货
2021/02/19
1650
看完Java的动态代理技术——Pythoner笑了
Java的动态代理常用来包装原始方法调用,用于增强或改写现有方法的逻辑,它在Java技术领域被广为使用,在阿里的Sofa RPC框架序列化中你能看到它的身影,Hibernate的实体类功能增强也是以动态代理的方式解决的,还有Spring吹牛逼的AOP功能也是它搞定的。接下来我们看一个例子,该例子用于对原有的方法调用前后各打印一句话,这也算是对原有类方法的一种增强。
老钱
2018/08/14
3850
静态代理和动态代理区别(是否有实现类)
Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题,
ha_lydms
2023/08/09
2460
静态代理和动态代理区别(是否有实现类)
Java Web之动态代理
动态代理通俗解释: A接口有c方法,类B实现A接口,原本应该是执行B类中的c方法,可现在不这样做,可以先声明产生B类的代理类B',由它来冒充B类的“兄弟”并“实现”A接口, 对外界来说B'应该也有c方法,可当真正调用它的时候, 它会去执行与它关联InvocationHandler的invoke()方法, 在这个方法里面你可以做很多事情。 Java怎样实现动态代理呢 第一步,我们要有一个接口,还要有一个接口的实现类,而这个实现类就是我们要代理的类。 public interface Subject {
YungFan
2018/05/03
6950
Java动态代理与静态代理静态代理动态代理
我们先看一个简单的例子,当我们需要程序中加入方法执行的日志信息的时候,很显然我们最容易想到的实现方法,就是在方法前后插入日志记录信息。
desperate633
2018/08/22
5510
Java动态代理与静态代理静态代理动态代理
讲一些你所不知道的Java动态代理
Proxy 是设计模式中的一种。当需要在已存在的 class 上添加或修改功能时,可以通过创建 proxy object 来实现
苏先生
2019/05/02
2710
讲一些你所不知道的Java动态代理
Java动态代理一览笔录
1、什么是代理? 比较经典的含义如销售代理,签订合同的基础上,为委托人(厂商)销售某些特定产品或全部产品的代理商,对价格、条款及其他交易条件可全权处理。我们从销售代理那里购买产品,通常是不知道销售代理背后的委托人(厂商)是谁,也就是 "委托人" 对于我们来说是不可见的。 代理,简单来说,也就是提供代理人,并有代理人全权处理委托人的事务。 在Java中,代理模式,类似的,也就是为某个对象(即委托人)提供一个代理对象(即代理人),并由代理对象(即代理人)全权控制对于原对象(即委托人)的访问。客户对于委托人不再可
斯武丶风晴
2018/03/01
7230
Java动态代理一览笔录
JDK动态代理源码学习
继上一篇博客设计模式之代理模式学习之后http://blog.csdn.net/u014427391/article/details/75115928,本博客介绍JDK动态代理的实现原理,学习一下JDK动态代理的源码。 Proxy类。该类即为动态代理类,可以使用反编译工具查看jdk里源码。JDK动态代理实现主要由Proxy类的newProxyInstance()方法实现。实现起来很容易,但是学习都要学习原理,所以本博客主要介绍jdk动态代理实现的源码。
SmileNicky
2019/01/17
4010
Java动态代理的两种实现方法
转载自 http://blog.csdn.net/HEYUTAO007/article/details/49738887
allsmallpig
2021/02/25
4110
深入理解 Java 反射和动态代理
反射(Reflection)是 Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。
静默虚空
2022/03/23
3850
深入理解 Java 反射和动态代理
JDK动态代理深入探究
在上一篇文章设计模式之代理模式里,我们说了JDK动态代理类,不过我相信好多人都有疑惑,包括我,刚开始学的时候都是一脸懵逼,那么到底疑惑在哪里呢?
秃头哥编程
2019/06/17
3500
jdk的动态代理机制_jdk动态代理
摘要:   代理模式为其他对象提供了一种代理以控制对这个对象的访问,具体实现包括两大类:静态代理和动态代理。Java动态代理机制的出现使得Java开发人员只需要简单地指定一组接口及委托类对象便能动态地获得代理类,并且其所生成的代理类在将所有的方法调用分派到委托对象上反射执行的同时,还可以对方法进行增强,这也正是Spring AOP的实现基础。通过阅读本文,读者将会对代理模式和Java动态代理机制有更加深入的理解。
全栈程序员站长
2022/11/03
4620
jdk的动态代理机制_jdk动态代理
Java动态代理
打个比方,如果系统中有2个类,A和B,以前是A依赖B,即A直接调用B的某个方法,表示为A->B;
心平气和
2021/03/16
4550
Java动态代理原理及解析
代理:设计模式 代理模式是一种常用的设计模式,其目的就是为其他对象提供一个代理以控制对某个真实对象的访问。代理类负责为委托类预处理消息,过滤消息并转发消息,以及进行消息被委托类执行后的后续处理。 通过
Spark学习技巧
2018/04/17
1.2K1
Java动态代理原理及解析
Java 静态代理、Java动态代理、CGLIB动态代理
Java 的代理就是客户类不再直接和委托类打交道, 而是通过一个中间层来访问, 这个中间层就是代理。为啥要这样呢, 是因为使用代理有 2 个优势:
java思维导图
2019/05/21
7.1K0
java动态代理
      5. 调用上述生成的class UserService.java 是接口 UserServiceImpl.java是被代理对象 实现了UserService ProxyTool.java 是代理类 Test.Java测试类
曼路
2018/10/18
4090
相关推荐
Java 动态代理 原理解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档