- 浏览: 955896 次
- 性别:
- 来自: 魔都
文章分类
- 全部博客 (745)
- MultiThread (19)
- My Plan (118)
- JavaBasic (61)
- MyInterview (104)
- InternetTechnique (5)
- ProjectConclusion (1)
- Maven (5)
- MogoDb (5)
- Hadoop (11)
- Memcached (6)
- TechniqueCollect (1)
- Ibaits (1)
- Android (34)
- ItLife (40)
- Tree (2)
- ProjectArchitect (7)
- Open Source (3)
- liunx (5)
- socket (8)
- Spring (27)
- DesginPattern (35)
- WebBasic (13)
- English (13)
- structs (1)
- structs2 (2)
- Oracle (17)
- Hibernate (2)
- JavaScript (4)
- Jdbc (1)
- Jvm (15)
- Ibatis (1)
- DataStructures (13)
- Https/Socket/Tcp/Ip (3)
- Linux (4)
- Webservice (7)
- Io (2)
- Svn (1)
- Css (1)
- Ajax (1)
- ExtJs (1)
- UML (2)
- DataBase (6)
- BankTechnique (3)
- SpringMvc (3)
- Nio (3)
- Load Balancing/Cluster (3)
- Tools (1)
- javaPerformanceOptimization (8)
- Lucene(SEO) (1)
- My Think (80)
- NodeJs (1)
- Quartz (1)
- Distributed-java (1)
- MySql (7)
- Project (4)
- junit (4)
- framework (1)
- enCache (1)
- git (2)
- SCJP (1)
- sd (1)
最新评论
-
lkjxshi:
你都这水平了还考这个证干嘛
SCJP 认证考试指南 -
钟逸华:
问的真多
百度java开发面试题(转) -
zuimeitulip:
觉得我就是这样的,从小阅读量就很少,导致现在的读的速度非常慢, ...
让读书成为一种习惯 -
DDT_123456:
我觉得你是不符合要求。问你hashmap的那个问题,你那样回答 ...
阿里面试2(转) -
jingjing0907:
刚刚写了很多读过此博客的感受,竟然没有发上去,以为我注册账号还 ...
让读书成为一种习惯
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.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堆内存溢出的几种情况
2015-02-28 09:52 1129【情况一】: java ... -
图解TCP-IP协议(转)
2014-09-19 13:28 1052http://www.cricode.com/3568.h ... -
java 线程 整理(转)
2014-03-31 22:46 893java 线程 整理 1,简述 sync ... -
性能调优思考(转)
2013-11-20 19:42 1130前言 这篇文章非常有意思,写于2012年11 ... -
http协议详解(超详细)转
2013-11-06 23:23 1041http://blog.csdn.net/gueter/ar ... -
http协议详解(超详细)转
2013-11-06 23:18 969http://blog.csdn.net/gueter/ar ... -
java垃圾回收精华
2013-10-30 20:22 846本文系翻译: 原文地址:mechanical-sympath ... -
Eclipse快捷键 10个最有用的快捷键(转)
2013-10-28 23:11 862Eclipse快捷键 10个最有用的快捷键 ... -
深入理解Java Proxy机制(转)
2013-10-06 16:25 1049动态代理其实就是java.lang.reflect.P ... -
8 张图助你更好地理解 Java 编程(转)
2013-09-24 22:11 744所谓一图胜万言,本文中的这些图都是从ProgramCreek ... -
Java中堆与栈详解
2013-08-25 21:15 1020http://bbs.itcast.cn/thread-16 ... -
正确读取与设置缓存方法
2013-07-22 20:13 1299正确读取与设置缓存方法 博客分类: 并发编程 ... -
JAVA集合小结
2013-07-16 22:57 887JAVA集合小结 http://www.blogjava. ... -
四种java内部类总结
2013-07-15 19:11 7797第一 成员内部类 定义在另一个类的内部,而且与成员方法和属性 ... -
全国(大学)高等教育各学科视频教学全集
2013-05-30 20:01 2249为了方便已就 ... -
让你彻底明白JAVA中堆与栈的区别
2013-04-24 23:49 1025简单的说: Java把内存划分成两种:一种是栈内存,一种是堆 ... -
JDK中有关23个经典设计模式的示例
2013-04-23 21:55 761Structural(结构模式) Adapter: 把一个 ... -
JDK1.5/1.6/1.7之新特性总结
2013-03-19 21:59 1061开发过程中接触到了从jdk1.5---jdk1.7的使用,在 ... -
java中String和StringBuffer的区别(转载)
2013-03-14 14:27 917看到这个讲解的不错,所以转一下 在java中有3个类来负责 ... -
高效java异常处理机制
2013-01-30 19:41 1528Java开发人员做出的有 ...
相关推荐
### Java语言反射与动态代理深度解析 #### 一、Java反射机制详解 Java反射机制是Java编程语言的一个强大特性,允许程序在运行时检查和修改自身结构与行为。这一机制为开发人员提供了高度的灵活性,尤其是在框架...
《Java 深度历险》是一本专为Java开发者准备的深度学习书籍,它涵盖了Java编程语言的核心概念、高级特性以及实战应用。通过这本书,读者可以深入理解Java的内部机制,提升编程技能,实现从初级到高级的跨越。下面...
6. **反射与动态代理**:Java反射机制允许在运行时检查和修改程序的行为,动态代理则用于实现AOP(面向切面编程)等高级功能。 7. **Java内存模型**:介绍Java内存模型(JMM),它是理解和解决并发问题的关键,包括...
最后,书中的"深度历险"可能涵盖了一些高级主题,如Java反射、动态代理、JNI(Java Native Interface)和JVM优化技术。反射允许在运行时检查和修改类的结构,动态代理则可以实现动态地创建具有特定行为的代理类。JNI...
《Java深度历险》这本书是为那些希望深入了解Java平台运行机制的初学者和有经验的开发者准备的。它深入探讨了Java技术的核心概念,揭示了Java如何在幕后工作,帮助读者提升对Java语言的理解和应用能力。 1. **Java...
Java深度学习项目 这是Packt发布的的代码存储库。 使用Deeplearning4j和开源API实施10个真实世界的深度学习应用程序 这本书是关于什么的? Java是最广泛使用的编程语言之一。 随着深度学习的兴起,它已成为数据...
- **反射与动态代理**:反射允许程序在运行时检查和修改类的属性和方法,动态代理则用于创建接口的代理实现,常用于AOP(面向切面编程)和拦截器。 - **泛型**:泛型引入了类型安全,允许在编译时检查类型,减少...
7. **反射机制**:反射是Java强大的特性,能动态获取类的信息并操作类的对象。面试中可能会涉及Class类的使用,newInstance(),getMethod(),getField()等方法。 8. **JVM**:理解Java虚拟机的工作原理,包括内存...
其次,可能会深入探讨Java反射机制和动态代理,这两个特性让Java在运行时具有了强大的元数据操作能力和动态代码生成能力,广泛应用于框架开发和测试工具中。此外,书中也可能涉及Java的异常处理机制、错误与异常的...
8. **反射与动态代理**:Java的反射机制允许在运行时检查类、接口、字段和方法,而动态代理则可以用于实现AOP(面向切面编程)等高级功能。这部分内容通常对框架开发者尤其重要。 9. **Java泛型**:泛型引入了类型...
7. **反射与动态代理**:讲解如何在运行时检查和修改类的行为,以及如何实现动态代理。 8. **多线程编程**:涵盖线程同步、并发工具类和线程池的使用。 9. **I/O与NIO**:介绍Java的输入输出系统,包括传统I/O和非...
在构建基于Springboot的深度学习计算与存储服务中,整合MySQL、Redis和RabbitMQ是常见且高效的设计方案。这四个技术组件各自扮演着关键的角色,共同构建了一个强大的分布式系统。 首先,Springboot是一个轻量级的...
Java开发者应该熟悉单例、工厂、观察者、装饰器、适配器、策略、代理等经典设计模式。了解并熟练运用设计模式可以提高代码的可读性、可维护性和可扩展性。 5. **Excel技巧**:在数据分析或项目管理中,Excel往往被...
在Java的世界里,深度学习意味着不仅要掌握基本语法,还要理解其内在机制。本书可能会探讨以下几个核心主题: 1. **面向对象编程**:Java是一种典型的面向对象编程语言,书中的内容可能包括类、对象、封装、继承、...
总而言之,Java深度探索是一场不断学习和实践的过程。通过理解和掌握这些知识点,我们可以更好地驾驭这门语言,构建出高效、稳定、可维护的软件系统。无论你是初学者还是经验丰富的开发者,持续深化Java的学习都是...
《Java深度历险》是由知名Java专家王森撰写的一本高级Java学习书籍,由McGraw Hill出版社出版。这本书旨在帮助已经掌握了Java基础知识的开发者深入理解Java语言的精髓,提升编程技能,从而在实际开发中更好地应用...
《Java深度历险》是一本面向已有基础的Java程序员的高级读物,...通过深入学习和实践《Java深度历险》中的这些知识点,Java开发者可以提升自己的技术水平,更好地应对复杂项目和挑战,实现高效、稳定和可维护的代码。
- AOP(面向切面编程),动态代理等。 9. **注意事项**: - 使用反射时需处理`ClassNotFoundException`, `IllegalAccessException`, `InstantiationException`等异常。 - 反射可能导致代码难以理解和维护,应...
以上是Java常见笔试面试题目所涵盖的主要知识点,通过深入学习和实践,可以提高Java程序员的专业技能和面试竞争力。在面试中,不仅要能够准确回答问题,还要能结合实际项目经验进行案例分析,展现自己的问题解决能力...