1. 首先完成一个接口的创建(里面有真正的想要实现的方法):
public interface Subject {
public void request();//想要实现的方法
}
2. 写一个真实的主题类实现Subject接口(并实现其中的方法):
public class RealSubject implements Subject {
public void request() {//实现接口中的方法
System.out.println("真实的主题的实现的方法");
}
}
3. 写一个动态的代理类实现InvocationHandler接口:
//动态的代理类应该实现的是InvocationHandler接口(在java.lang.reflect包下)
public class Proxyhandle implements InvocationHandler {
Object obj = null;
//写一个绑定的方法,绑定不同的接口进行代理
public Object bind(Object obj){
this.obj = obj;
//该方法的返回值是一个对象
//Proxy有一个方法newProxyInstace();有三个参数:第一个:表示所代理的真实类类的实例的类的加载器
//第二个参数表示是:所要代理的真实类所实现的接口
//第三个是:代理类本身
return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), this);
}
//InvocationHandler接口中的方法invoke()
//invoke()之中的method就是表示真实类中实现接口中的那个方法
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
//调用参数method中的invoke()方法,其中有两个参数
//第一个参数表示:代理的真实类
//第二个参数表示:传入的参数 对象数组
System.out.println("代理之前的任务~~~");
Object o = method.invoke(this.obj, args);
System.out.println("代理之后的任务~~");
return o;//返回一个所代理的接口的实现类
}
}
4. 测试动态代理的类:TestProxy
public class TestProxy {
public static void main(String args[]){
Proxyhandle ph = new Proxyhandle();//拿到代理类的对象
//绑定代理的真实的主题对象
Subject sub = (Subject) ph.bind(new RealSubject());//将真实主题与代理进行绑定
sub.request();//调用真实对象的request(是实现接口中的方法)
//这时候代理类中的invock()方法将会被自动调用完成代理过程
}
//代理不同的真实类的话就直接改变bind()方法中的参数,传入你想要代理的真实类就ok
//这样就实现了动态的代理了
}
这样四步就完成来了一个动态代理的实例,每一步在代码中都有解释!
分享到:
相关推荐
Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类包括`Class`、`Field`、`Method`和`Constructor`,它们分别代表类、...
Java反射和动态代理是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行方面发挥着关键作用。本文将深入探讨这两个概念及其在实际开发中的应用。 **Java反射** Java反射API允许程序在运行时检查类、接口...
Java反射和动态代理是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行上发挥着关键作用。本文将深入探讨这两个概念,以及如何在实际开发中利用它们。 首先,我们来理解Java反射(Reflection)。Java反射...
详细讲解java的reflect包的,阐述反射机制及动态代理的细节问题。其中动态代理部分内容参考网上资料。读完此文,相信会对javaf反射机制有一个完整清楚的了解。尤其应该看看其他中代码举例部分。
几个Java反射和动态代理的小例子。可以学习如何通过Java的反射机制实例化对象、调用对象的方法、操作对象的私有成员变量、改变数组中的某项的值、改变数组大小等;可以学习Java的动态代理模式、学习Java工厂模式以及...
Java反射和动态代理是Java编程中的高级特性,它们在实际开发中有着广泛的应用。反射机制允许我们在运行时检查类、接口、字段和方法的信息,甚至能够动态调用方法和修改对象的状态。动态代理则是在运行时创建一个实现...
Java反射和动态代理是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行上发挥着关键作用。本文将深入探讨这两个概念及其在实际开发中的应用。 **Java反射** Java反射API允许程序在运行时检查类、接口、...
java反射机制和动态代理的原理,熟悉反射机制和动态代理
Java的反射机制与动态代理是Java编程中两个非常重要的高级特性,它们在许多实际场景中发挥着关键作用,如框架开发、插件系统、元数据处理等。下面将详细讲解这两个概念及其应用。 首先,Java的反射机制允许我们在...
总的来说,Java反射机制和动态代理是Java平台强大而灵活的特性,它们使得Java程序能够在运行时具有更高的灵活性和可扩展性。然而,使用反射也可能带来性能开销和安全风险,因此在实际应用中需要权衡利弊,合理使用。
主要讲述Java反射机制与设计模式之一:代理模式的原理与应用;同时详细讲述了Java对代理模式的支持以及Java中动态代理的原理,应用与实践。
1. 动态代理原理:动态代理是基于Java反射机制,通过在运行时动态生成实现了特定接口的代理类,以此来实现对原对象的代理。 2. java.lang.reflect.Proxy类:Proxy类提供了创建动态代理类和代理对象的工厂方法。通过...
Java反射和动态代理是Java编程中的重要特性,它们允许程序在运行时检查和操作类、接口、对象等的内部结构,以及动态地创建代理对象来处理特定任务。在这篇文章中,我们将深入探讨这两个主题,结合"reflections"这个...
接下来,我们讨论Java反射。反射是Java的一项强大的功能,它允许我们在运行时检查类、接口、字段和方法的信息,甚至可以在运行时创建和操作类的对象。`java.lang.Class`类是反射的核心,我们可以使用`Class.forName...
总结来说,Java反射机制和动态代理是Java编程中不可或缺的部分,它们极大地扩展了Java的灵活性和可扩展性,使得程序员可以在运行时对程序进行更深层次的控制。了解和熟练掌握这两项技术,对于提高Java开发能力和解决...
在"JAVA反射与代理"这个主题中,我们将深入探讨这两个核心概念。 首先,让我们了解反射的基本用法。当一个类的名称在运行时才被知道,反射可以帮助我们动态地创建对象。例如,我们可以使用`Class.forName()`方法...