`
djob2008
  • 浏览: 130466 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

编写Java动态代理的步骤

阅读更多

编写Java动态代理的步骤如下:

 

1.创建一个实现接口InvocationHandler的类,它必须实现invoke方法

 

2.创建被代理的类以及接口

 

3.通过Proxy的静态方法 

newProxyInstance(ClassLoader loader, Class[] interfaces, InvocationHandler h)

 

 

 

4.通过代理调用方法

package test;

public interface PeopleInfac {
	public void showInfo();

}

 

package test;

public class People implements PeopleInfac {

	public void showInfo() {

		System.out.println("people showInfo()");
	}

}

 

package test;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;

public class DanimacProxy implements InvocationHandler {

	Object o;

	public DanimacProxy(Object o) {
		this.o = o;
	}

	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		method.invoke(o, null);
		return null;
	}
}

 

package test;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;

public class Test {

	public static void main(String[] args) {

		People p = new People();

		InvocationHandler proxy = new DanimacProxy(p);

		Class<?> cls = p.getClass();

		PeopleInfac pi = (PeopleInfac) Proxy.newProxyInstance(cls
				.getClassLoader(), cls.getInterfaces(), proxy);

		pi.showInfo();
	}
}

 

 

分享到:
评论

相关推荐

    java动态代理实现详解

    使用Java动态代理的步骤: 1. 实现`InvocationHandler`:创建一个类实现`InvocationHandler`接口,重写`invoke()`方法。在这里可以添加预处理、后处理逻辑,或者转发调用给目标对象。 2. 定义接口:确定代理对象需要...

    java jdk 动态代理 演示demo

    在静态代理中,我们通过编写额外的代理类来实现这一目标,但在动态代理中,代理类是在运行时生成的,无需预先编写代码。 Java JDK提供了`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口,...

    java动态代理类的实例

    在Java中,静态代理是通过定义一个与被代理类实现相同接口的新类来实现的,而动态代理则在运行时动态生成此类,无需预先编写代理类的代码。 `java.lang.reflect.Proxy`类是Java动态代理的核心,它提供了创建代理...

    Java动态代理详解; CGLib实现动态代理1

    在动态代理中,我们不需要预先编写代理类,而是通过 `InvocationHandler` 实现方法调用的拦截。 CGLib(Code Generation Library)是一个第三方库,它可以在运行时动态地生成子类,从而实现对目标类的代理。在 Java...

    用Java实现的代理模式之动态代理

    在提供的压缩包中,`ProxyDemo02`可能是Java动态代理的示例代码,它可能包含了创建代理对象、设置`InvocationHandler`以及调用代理对象的方法等步骤。`代理模式之动态代理.exe`可能是一个视频播放程序,其中详细...

    Java动态代理实现 Proxy InvocationHandler

    Java动态代理是Java提供的一种在运行时创建代理对象的技术,它可以让我们在不修改原有类代码的情况下,对目标类的方法进行增强或扩展。这种技术主要基于Java的`java.lang.reflect.Proxy`类和`java.lang.reflect....

    JAVA类加载机制与动态代理

    ### JAVA类加载机制与动态代理 #### 一、类加载机制 ##### 1.1 类加载的时机 类加载机制负责将描述类的数据从`.class`文件加载到内存,并进行必要的校验、转换解析和初始化,使之成为可以被Java虚拟机直接使用的...

    Java动态代理机制综合分析及

    在Java中,动态代理的使用步骤如下: 1. 创建一个实现了`InvocationHandler`接口的类,自定义`invoke`方法,处理代理逻辑。 2. 使用`Proxy.getProxyClass(classLoader, interfaces)`获取代理类的Class对象,其中`...

    java动态代理

    Java动态代理是Java编程中一个重要的特性,它允许我们在运行时创建代理对象,这些代理对象可以代表并增强原对象的功能。动态代理在AOP(面向切面编程)中发挥着核心作用,它允许我们实现非侵入式的服务,如日志、...

    java的动态代理

    #### 三、JDK动态代理的关键步骤 1. **定义接口**: - 首先定义一个接口`Speak`,它规定了代理类和被代理类共同需要遵循的方法签名。 ```java public interface Speak { public String speak(String ...

    java操作IE代理

    实现Java操作IE代理的基本步骤如下: 1. **加载本地库**:使用`System.loadLibrary()`方法加载"ICE_JNIRegistry.dll",确保其路径已经被Java虚拟机找到。 2. **定义JNI接口**:在Java代码中定义JNI接口,这些接口...

    java 动态代理模式 适配器模式

    这些文本可能包含了如何创建动态代理对象、如何实现InvocationHandler、如何设计适配器类以及如何在实际项目中应用这两种模式的具体步骤。为了深入理解这两种模式,建议阅读并分析这些文本中的代码和解释,以便更好...

    动态代理和AOP详解

    创建动态代理的基本步骤如下: 1. 定义一个或多个接口。 2. 创建一个实现了`InvocationHandler`接口的类,重写`invoke()`方法,在这个方法中添加代理逻辑。 3. 使用`Proxy.newProxyInstance()`方法,传入目标接口、...

    java-用Java动态代理实现AOP.pdf

    error(e); throw e; } return o; } } 在上面的例子中,`LogHandler` 实现了 `InvocationHandler` 接口。...理解并熟练掌握 AOP 是提升 Java 开发能力的重要步骤,它可以帮助我们编写出更高效、更易于维护的代码。

    Java写http代理服务器

    本主题将深入探讨如何使用Java语言来编写这样的代理服务器。以下是对这个主题的详细解析: 首先,理解HTTP代理服务器的基本原理是必要的。HTTP代理服务器作为客户端与目标服务器之间的中介,它接收客户端的HTTP请求...

    Java反射及动态代理

    1. 动态生成:代理类是在运行时动态生成的,无需预先编写代理类源代码。 2. 易于扩展:通过实现`InvocationHandler`,可以方便地添加额外的行为,如日志、事务管理等。 3. 灵活性高:可以为任何实现了相同接口的对象...

    使用cglib演示动态代理时用到的jar包 aop 动态代理

    使用CGLIB进行动态代理的基本步骤如下: 1. 引入CGLIB库:在项目中引入CGLIB的jar包,如题目中的"使用cglib演示动态代理时用到的jar包"。 2. 创建Enhancer对象:这是CGLIB的核心类,用于配置代理对象的生成。 3. ...

    java获取浏览器代理设置

    这时,我们可以使用JNI(Java Native Interface)来调用C/C++编写的本地库来读取注册表。`registry.jar`可能是封装了这样的功能的Java库,它提供了与注册表交互的接口。而`ICE_JNIRegistry.dll`则是一个动态链接库,...

Global site tag (gtag.js) - Google Analytics