`
lvwenwen
  • 浏览: 955896 次
  • 性别: Icon_minigender_1
  • 来自: 魔都
社区版块
存档分类
最新评论

JAVA动态代理深度学习

阅读更多
JAVA动态代理深度学习(代理,InvocationHandler的),含元Proxy0源码

JAVA动态代理深度学习,

一相关类及其方法。

java.lang.reflect.Proxy,
代理 是代理实例的调用处理程序









二源代码。

被代理对象的接口及实现类:
com.ml.test包;

公共接口管理器{
公共无效修改();
}

包com.ml.test;

公共类ManagerImpl实现管理{

@覆盖
公共无效修改(){
   (“*******修改()方法扩展功能被调用”);
}
}

业务代理类:
包com.ml.test;

进口java.lang.reflect.InvocationHandler的;
进口java.lang.reflect.Method;

公共类BusinessHandler的实现InvocationHandler的{

私人Object对象= NULL;

公共BusinessHandler(Object对象){
   this.object =对象;
}

@覆盖
公共对象调用(代理对象,方法的方法,对象[]参数)
    抛出的Throwable {
   System.out.println(“前法做什么”);
   对象RET = method.invoke(this.object里,args);
   系统。通过out.println(“后方法”);
   返回RET;


} }



客户端类:的
包com.ml.test;
进口java.lang.reflect.Proxy
公共类客户{

公共静态无效的主要(字符串[]参数){
   / /元对象(被代理对象)
   ManagerImpl managerImpl =新ManagerImpl();

   / /业务代理类
   BusinessHandler securityHandler =新BusinessHandler(managerImpl);

   / /获得代理类($ Proxy0扩展代理实现经理)的实例
   经理managerProxy =(经理)Proxy.newProxyInstance(managerImpl
     。的getClass()getClassLoader(),managerImpl.getClass(),
     。getInterfaces(),securityHandler);

   managerProxy.modify();

} }

三执行结果:
之前的方法做的东西
*******修改()方法被调用
方法后的东西

四机制分析。

代理。(ClassLoader的装载机,类<?> []接口,InvocationHandler的Ĥ)做了以下几件事。
(1)根据参数加载器和接口调用方法getProxyClass(装载机, 代理{    InvocationHandler的H = NULL;    保护代理(InvocationHandler的H){     this.h = H;    }    ... } 下面什么本例的$ Proxy0类的源码(好不容易才把它提出来):














java.lang.reflect.InvocationHandler的进口;
进口java.lang.reflect.Method;
进口java.lang.reflect.Proxy;
进口java.lang.reflect.UndeclaredThrowableException;

公众最后一堂课$ Proxy0扩展代理实现管理{

私有静态方法M1,
M0私人静态方法;
私人静态方法立方米;
私有静态方法M2; 静态{    尝试{     M1 = Class.forName的(“java.lang.Object继承”)getMethod(“等于”。       新的Class [] { Class.forName的(“java.lang.Object继承”)});     M0 = Class.forName的(“java.lang.Object继承”)getMethod(“的hashCode”,       新的类[0]);     M3 = Class.forName的(“ com.ml.test.Manager“)。getMethod(”修改“,       新的类[0]);     M2 = Class.forName的(“java.lang.Object继承”)getMethod(“。的toString”,       新的类[0]) ;    }(NoSuchMethodException nosuchmethodexception){     扔,新NoSuchMethodError(nosuchmethodexception.getMessage());    }的catch(ClassNotFoundException异常ClassNotFoundException异常){     抛出新出现NoClassDefFoundError(classnotfoundexception.getMessage());    } } $ Proxy0(InvocationHandler的InvocationHandler的){    超(InvocationHandler的); }





















@覆盖
公众最终布尔等于(对象obj){
   {
    返回((布尔)super.h.invoke的(这一点,M1,新的对象obj的[] {}))
      booleanValue();
   }的catch(Throwable的抛出){
    扔新UndeclaredThrowableException(抛出);
   }
}

@覆盖
公众最终诠释的hashCode(){     ((整数)super.h.invoke(本),M0,空)的intValue();    }
   {
返回
赶上(抛出的Throwable){
    抛出UndeclaredThrowableException新(抛出);
   }
}

公众最终无效修改(){
   {
    super.h.invoke(这一点,M3,NULL);
    回报;
   }渔获量(误差e){
   }的catch(Throwable的抛出){
    抛出新UndeclaredThrowableException(抛出);
   }
}

@覆盖
公众最终字符串的toString(){
   尝试{
    返回(字符串)super.h.invoke(M2,NULL);
   }捕捞(抛出的Throwable){
    扔新UndeclaredThrowableException(抛出);
   }
}
}

接着把得到的$Proxy0实例强制转换成Manager.
当执行managerProxy.modify()方法时,就调用了$Proxy0类中的modify()方法.
在modify方法中,调用父类Proxy中的h的invoke()方法.
即InvocationHandler.invoke();
分享到:
评论

相关推荐

    java语言反射与动态代理学习笔记

    ### Java语言反射与动态代理深度解析 #### 一、Java反射机制详解 Java反射机制是Java编程语言的一个强大特性,允许程序在运行时检查和修改自身结构与行为。这一机制为开发人员提供了高度的灵活性,尤其是在框架...

    Java 深度历险.pdf

    《Java 深度历险》是一本专为Java开发者准备的深度学习书籍,它涵盖了Java编程语言的核心概念、高级特性以及实战应用。通过这本书,读者可以深入理解Java的内部机制,提升编程技能,实现从初级到高级的跨越。下面...

    java深度历险+深入java虚拟机

    6. **反射与动态代理**:Java反射机制允许在运行时检查和修改程序的行为,动态代理则用于实现AOP(面向切面编程)等高级功能。 7. **Java内存模型**:介绍Java内存模型(JMM),它是理解和解决并发问题的关键,包括...

    Java深度历险-完整版

    最后,书中的"深度历险"可能涵盖了一些高级主题,如Java反射、动态代理、JNI(Java Native Interface)和JVM优化技术。反射允许在运行时检查和修改类的结构,动态代理则可以实现动态地创建具有特定行为的代理类。JNI...

    Java深度历险

    《Java深度历险》这本书是为那些希望深入了解Java平台运行机制的初学者和有经验的开发者准备的。它深入探讨了Java技术的核心概念,揭示了Java如何在幕后工作,帮助读者提升对Java语言的理解和应用能力。 1. **Java...

    Java-Deep-Learning-Projects:Packt发布的Java深度学习项目

    Java深度学习项目 这是Packt发布的的代码存储库。 使用Deeplearning4j和开源API实施10个真实世界的深度学习应用程序 这本书是关于什么的? Java是最广泛使用的编程语言之一。 随着深度学习的兴起,它已成为数据...

    java 深度历险

    - **反射与动态代理**:反射允许程序在运行时检查和修改类的属性和方法,动态代理则用于创建接口的代理实现,常用于AOP(面向切面编程)和拦截器。 - **泛型**:泛型引入了类型安全,允许在编译时检查类型,减少...

    Java常见笔试、面试题目深度剖析

    7. **反射机制**:反射是Java强大的特性,能动态获取类的信息并操作类的对象。面试中可能会涉及Class类的使用,newInstance(),getMethod(),getField()等方法。 8. **JVM**:理解Java虚拟机的工作原理,包括内存...

    JAVA2深度历险.pdf

    其次,可能会深入探讨Java反射机制和动态代理,这两个特性让Java在运行时具有了强大的元数据操作能力和动态代码生成能力,广泛应用于框架开发和测试工具中。此外,书中也可能涉及Java的异常处理机制、错误与异常的...

    JAVA2深度历险(王森)

    8. **反射与动态代理**:Java的反射机制允许在运行时检查类、接口、字段和方法,而动态代理则可以用于实现AOP(面向切面编程)等高级功能。这部分内容通常对框架开发者尤其重要。 9. **Java泛型**:泛型引入了类型...

    java深度历险1

    7. **反射与动态代理**:讲解如何在运行时检查和修改类的行为,以及如何实现动态代理。 8. **多线程编程**:涵盖线程同步、并发工具类和线程池的使用。 9. **I/O与NIO**:介绍Java的输入输出系统,包括传统I/O和非...

    基于Springboot+MySQL+Redis+RabbitMQ的深度学习计算&amp;存储服务.zip

    在构建基于Springboot的深度学习计算与存储服务中,整合MySQL、Redis和RabbitMQ是常见且高效的设计方案。这四个技术组件各自扮演着关键的角色,共同构建了一个强大的分布式系统。 首先,Springboot是一个轻量级的...

    Java最全学习资料+面试题+DOS命令+设计模式+Excel技巧+java学习笔记

    Java开发者应该熟悉单例、工厂、观察者、装饰器、适配器、策略、代理等经典设计模式。了解并熟练运用设计模式可以提高代码的可读性、可维护性和可扩展性。 5. **Excel技巧**:在数据分析或项目管理中,Excel往往被...

    java深度历险

    在Java的世界里,深度学习意味着不仅要掌握基本语法,还要理解其内在机制。本书可能会探讨以下几个核心主题: 1. **面向对象编程**:Java是一种典型的面向对象编程语言,书中的内容可能包括类、对象、封装、继承、...

    java深度入险

    总而言之,Java深度探索是一场不断学习和实践的过程。通过理解和掌握这些知识点,我们可以更好地驾驭这门语言,构建出高效、稳定、可维护的软件系统。无论你是初学者还是经验丰富的开发者,持续深化Java的学习都是...

    java深度历险.rar

    《Java深度历险》是由知名Java专家王森撰写的一本高级Java学习书籍,由McGraw Hill出版社出版。这本书旨在帮助已经掌握了Java基础知识的开发者深入理解Java语言的精髓,提升编程技能,从而在实际开发中更好地应用...

    java深度历险-深入讨论java

    《Java深度历险》是一本面向已有基础的Java程序员的高级读物,...通过深入学习和实践《Java深度历险》中的这些知识点,Java开发者可以提升自己的技术水平,更好地应对复杂项目和挑战,实现高效、稳定和可维护的代码。

    Java常见笔试、面试系列深度剖析第三讲

    - AOP(面向切面编程),动态代理等。 9. **注意事项**: - 使用反射时需处理`ClassNotFoundException`, `IllegalAccessException`, `InstantiationException`等异常。 - 反射可能导致代码难以理解和维护,应...

    Java常见笔试面试题目深度剖析

    以上是Java常见笔试面试题目所涵盖的主要知识点,通过深入学习和实践,可以提高Java程序员的专业技能和面试竞争力。在面试中,不仅要能够准确回答问题,还要能结合实际项目经验进行案例分析,展现自己的问题解决能力...

Global site tag (gtag.js) - Google Analytics