先看一下代理模式,这个应该是设计模式中最简单的一个了,类图

代理模式最大的特点就是代理类和实际业务类实现同一个接口(或继承同一父类),代理对象持有一个实际对象的引用,外部调用时操作的是代理对象,而在代理对象的内部实现中又会去调用实际对象的操作

Java动态代理其实内部也是通过Java反射机制来实现的,即已知的一个对象,然后在运行时动态调用其方法,这样在调用前后作一些相应的处理,这样说的比较笼统,举个简单的例子

比如我们在应用中有这样一个需求,在对某个类的一个方法的调用前和调用后都要做一下日志操作,

一个普通的接口

public interface AppService { public boolean createApp(String name); }

该接口的默认实现类

public class AppServiceImpl implements AppService { public boolean createApp(String name) { System.out.println("App["+name+"] has been created."); return true; } }

日志处理器

public class LoggerInterceptor implements InvocationHandler {//注意实现这个Handler接口 private Object target;//目标对象的引用,这里设计成Object类型,更具通用性 public LoggerInterceptor(Object target){ this.target = target; } public Object invoke(Object proxy, Method method, Object[] arg) throws Throwable { System.out.println("Entered "+target.getClass().getName()+"-"+method.getName()+",with arguments{"+arg[0]+"}"); Object result = method.invoke(target, arg);//调用目标对象的方法 System.out.println("Before return:"+result); return result; } }

外部调用

public class Main { public static void main(String[] args) { AppService target = new AppServiceImpl();//生成目标对象 //接下来创建代理对象 AppService proxy = (AppService) Proxy.newProxyInstance( target.getClass().getClassLoader(), target.getClass().getInterfaces(), new LoggerInterceptor(target)); proxy.createApp("Kevin Test"); } }

Java动态代理的应用相关推荐

  1. java动态代理【一】

    java动态代理的定义:为其他目标类的方法增加切面的逻辑,即在执行目标类方法的时候,先去执行一段如校验检测的逻辑代码.java通俗一点就是生成一个继承目标类的子类,并在每个调用方法都添加一段逻辑. 应 ...

  2. Java动态代理的实现

    动态代理作为代理模式的一种扩展形式,广泛应用于框架(尤其是基于AOP的框架)的设计与开发,本文将通过实例来讲解Java动态代理的实现过程. 友情提示:本文略有难度,读者需具备代理模式相关基础知识,. ...

  3. Java动态代理与Cglib代理

    为什么80%的码农都做不了架构师?>>>    最近又继续回来死磕Spring源码,以前看的也忘得差不多了,这次先把Spring使用的动态代理cglib看了一下,打好基础知识. cg ...

  4. JAVA 动态代理学习记录

    打算用JAVA实现一个简单的RPC框架,看完RPC参考代码之后,感觉RPC的实现主要用到了两个方面的JAVA知识:网络通信和动态代理.因此,先补补动态代理的知识.---多看看代码中写的注释 参考:Ja ...

  5. 初看Mybatis 源码 (二) Java动态代理类

    先抛出一个问题,用过Mybatis的都知道,我们只需要定义一个Dao的接口,在里面写上一些CRUD相关操作,然后配置一下sql映射文件,就可以达到调用接口中的方法,然后执行sql语句的效果,为什么呢? ...

  6. Java初学者如何迈出AOP第一步--使用Java 动态代理实现AOP

    Java初学者如何迈出AOP第一步--使用Java 动态代理实现AOP xBird 原创  (参与分:36,专家分:90)   发表:2004-9-3 上午9:37   版本:1.0   阅读:160 ...

  7. java动态代理上是否能再进行一层代理

    CGLIB动态代理类 import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.p ...

  8. Java 动态代理机制分析及扩展--转

    http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/#icomments http://www.ibm.com/developerworks/c ...

  9. Java动态代理类使用

    Java动态代理类使用 Java动态代理类位于Java.lang.reflect包下,一般主要涉及到以下两个类: 一.Interface InvocationHandler:该接口中仅定义了一个方法O ...

最新文章

  1. 怎么把cad的图导入ps_PS中怎么抠图?以扣取头部图像为例
  2. Table Controls in ABAP Programs
  3. IOS 实现TXT文本自动识别编码的方法
  4. python3解释器执行'abcdd'.endswith('cd')的结果是___python3解释器执行for x
  5. 95-140-122-源码-transform-算子reduce
  6. Filter(过滤器)、Listener(监听器)
  7. Android中通过反射和getResource()得到id的方式去改变View的显示效果
  8. linux环境下安装robot,install robotframework (linux)
  9. 医院职工离职申请证明模板,共计10篇
  10. 拟人拟物法求解不等圆Packing问题
  11. 新浪邮箱开通imap服务器,新浪邮箱申请
  12. excel取消隐藏_Excel教程:教你两招,批量取消隐藏工作表
  13. 中国生物农药行业需求态势及“十四五”前景规划报告(2022-2027年)
  14. 从零基础到拿到网易Java实习offer,我做对了哪些事
  15. 直播预告| ICML专场四~
  16. 相机标定与3D重建(0)标定板说明
  17. 《零基础学Python》✍知识点整理
  18. Qt之数据库:MySql驱动编译
  19. mysql jena rdf_RDF结合Jena初步基础学习(一)
  20. rv1126如何切换720p和1080p

热门文章

  1. php uncaught thrown,PHP异常详解
  2. stm32官方例程在哪找_正点原子Linux第十一章模仿STM32驱动开发格式实验
  3. 与通用计算机相比 单片机具体有哪些特点,嵌入式系统-复习大纲_彭荣
  4. mysql中备份和导出的区别_mysql的备份和导出
  5. oracle数据库怎么导出dat文件_论将数据从数据库导出为dat格式.docx
  6. apache服务器配置证书方法!
  7. Auth模块、Forms组件
  8. 20175316 盛茂淞 实验一 Java开发环境的熟悉
  9. thinkphp 5.1/tp5.1 route路由bug
  10. tkinter学习-菜单与画布