关于静态代理我就不说了,完全是自己的思想去实现。
动态代理的例子我也不写了,我这里仅仅写几个简单的类来说明一下
interface person
class teacher implements person
class proxyfactory implements invacationhandle
class proxyTest
先说下我的问题在那里,问题就在proxyfactory中的实现invactionhandle的invoke方法,
问题1:第一个参数proxy的作用
问题2:当我debug的时候,这个方法返回的是个null
问题3:当method的invoke方法的object参数如果换成proxy的话,会是死循环
google上看到一个高手是这么说的
1.当debug的时候看到proxy并不是null,而是$proxy ,而且被绑定到proxyfactory对象名为h
2.另一个哥们说proxy看似代理对象,其实仅仅是为了检查权限的
请高手们给个详细的解释,期待中!不知道原理是很痛苦的事情。
++++++++++++++++++++++++++++++++++
新发现,补充一下:
1.proxy实际就是生成的代理对象,但是不知道为什么要传入那个参数。
2.生成代理对象虽然不是为null但是调用一些hachcode等方法时会报空指针异常
3.我的推测是当生成的这个代理对象去执行一个方法的时候,因为这个代理对象本身是一个$proxy0(debug的时候看到的),肯定jvm对这样的对象有一定的监听机制,监听到以后会去调代理对象所属的invocationhandle的invoke方法,吧method以及args都传递过去,但是现在还不明白为什要吧proxy也传递过去。
待续.......
++++++++++++++++++++++++++++++++++
再补充:
又另一个兄弟这么说:
说动态代理实际是解析被代理对象的class文件,加入新的东西,用流的方式处理的。不知道正确不,也同样希望高手给个答案。
分享到:
相关推荐
本篇文章将深入探讨如何在Java环境下,结合MySQL数据库,利用动态代理和反射技术来实现简单的ORM框架。 首先,我们需要了解动态代理和反射的基本概念。动态代理是在运行时创建一个接口的实现类,这个实现类会调用...
本文将深入探讨动态代理的底层源码和核心思想。 动态代理主要涉及到两个接口:`java.lang.reflect.InvocationHandler` 和 `java.lang.reflect.Proxy`。`InvocationHandler` 是处理代理对象方法调用的接口,而 `...
Java反射和动态代理是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行上发挥着关键作用。本文将深入探讨这两个概念,以及如何在实际开发中利用它们。 首先,我们来理解Java反射(Reflection)。Java反射...
在本主题中,我们将探讨如何使用Java动态代理来模拟实现Spring AOP的功能。 首先,我们需要了解Java中的两种动态代理机制:JDK动态代理和CGLIB动态代理。JDK动态代理基于接口实现,适用于目标对象实现了接口的情况...
本文将深入探讨Struts2拦截器的原理以及它与Java中的动态代理之间的联系。 首先,让我们了解Struts2拦截器的基本工作原理。拦截器在Action执行前后被调用,形成一个拦截器链。每当一个HTTP请求到达,Struts2的...
现在,让我们深入探讨Java动态代理及其在Spring AOP中的应用。 首先,我们需要了解Java动态代理的基本概念。在Java中,动态代理主要通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口...
Java反射机制与动态代理是Java编程中的重要概念,它们在软件设计中扮演着核心角色,尤其是在框架开发中。本文将深入探讨这两个主题,以及如何在实际应用中利用它们。 首先,我们来理解Java反射机制。反射是Java的一...
本文将深入探讨Java的动态代理机制及其相关知识点。 首先,我们要了解Java中实现动态代理的两种主要方式:`java.lang.reflect.Proxy`类和`java.lang.invoke.MethodHandle`接口。Proxy类是Java内置的动态代理实现,...
本文探讨的是一种基于动态代理的Java远程调用框架,旨在解决传统远程调用技术如RMI(Remote Method Invocation)所面临的挑战。 RMI是Java平台上的基础远程调用技术,自JDK 1.1开始引入。它允许对象方法在不同的JVM...
本篇文章将深入探讨代理模式的原理,特别是静态代理、JDK动态代理以及CGLIB动态代理。 1. **代理模式概述** 代理模式是设计模式中的结构型模式之一,它提供了一种方式来控制对目标对象的访问。代理对象可以看作是...
下面我们将深入探讨CGlib动态代理的相关知识点。 ### CGlib简介 CGlib(Code Generation Library)是一个强大的高性能的代码生成库,它在运行期扩展Java类与实现Java接口。CGlib是通过在运行时生成字节码来实现动态...
在IT行业中,网络编程是不可或缺的一部分,而代理服务器在数据通信、网络安全以及多线程爬虫等场景下扮演着重要角色。...通过这种方式,开发者可以快速集成到自己的项目中,实现Java应用对IE代理设置的动态获取和使用。
本篇文章将深入探讨如何使用动态代理实现AOP。 1. **AOP概念** - AOP(Aspect Oriented Programming)面向切面编程,是程序设计的一种新范式,旨在提高代码的可复用性和模块化。它通过将关注点(如日志、事务管理...
本文将深入探讨Spring如何利用JDK动态代理技术来实现这一功能,并通过实例解析其底层实现。 首先,让我们理解什么是JDK动态代理。在Java中,动态代理是一种在运行时创建代理类的能力,它允许我们为一组接口创建代理...
基于代理的AOP主要使用了我们前面提到的动态代理,它可以对基于接口的类进行代理,而CGLIB库则用于那些没有接口或者需要更底层代理的情况。 Spring AOP中的切面(Aspect)是一个封装了多个相关通知(Advice,即切面...
动态代理在Java编程中是一种非常重要的技术,它允许我们在不修改原有对象代码的情况下,为对象增加额外的功能。CGLIB(Code Generation ...通过深入研究CGLIB的源码,可以更好地理解Java字节码和动态代理的底层机制。
本资源将深入探讨Spring框架中使用的两种关键的动态代理方式:JDK动态代理和CGLib动态代理。这两种代理方式在Spring AOP中起到关键作用,用于实现横切关注点的切面编程。通过学习它们的原理和实际应用,您将能够更好...
6. **反射与动态代理**:Java反射机制允许在运行时检查和修改程序的行为,动态代理则用于实现AOP(面向切面编程)等高级功能。 7. **Java内存模型**:介绍Java内存模型(JMM),它是理解和解决并发问题的关键,包括...
通过上述分析,我们可以看到,获取Spring中代理对象的目标对象并非一件简单的事情,它涉及到Spring AOP的底层实现以及Java反射机制的运用。`AopTargetUtils`工具类提供了一种统一的方式,无论是JDK动态代理还是CGLIB...
在Java中,动态代理通过实现`java.lang.reflect`包下的`InvocationHandler`接口来实现。`InvocationHandler`接口的`invoke`方法是动态代理机制的核心,所有通过动态代理调用的方法最终都会被转发到`invoke`方法执行...