`
dahuilang
  • 浏览: 10719 次
  • 性别: Icon_minigender_1
  • 来自: 烟台
社区版块
存档分类
最新评论

java 反射 动态代理

阅读更多
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
               //这样就实现了动态的代理了
}
这样四步就完成来了一个动态代理的实例,每一步在代码中都有解释!
分享到:
评论
1 楼 dreamhunter 2012-04-28  
sub.request();//调用真实对象的request(是实现接口中的方法)
//这时候代理类中的invock()方法将会被自动调用完成代理过程

为什么这个invoke函数会被自动调用呢?

相关推荐

    Java反射与动态代理

    Java反射是Java编程语言中的一个强大特性,它允许运行中的Java程序对自身进行检查并且可以直接操作程序的内部属性。在Java中,反射机制的核心类包括`Class`、`Field`、`Method`和`Constructor`,它们分别代表类、...

    java反射与动态代理笔记

    Java反射和动态代理是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行方面发挥着关键作用。本文将深入探讨这两个概念及其在实际开发中的应用。 **Java反射** Java反射API允许程序在运行时检查类、接口...

    Java 反射-动态代理

    Java反射和动态代理是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行上发挥着关键作用。本文将深入探讨这两个概念,以及如何在实际开发中利用它们。 首先,我们来理解Java反射(Reflection)。Java反射...

    Java反射及动态代理

    详细讲解java的reflect包的,阐述反射机制及动态代理的细节问题。其中动态代理部分内容参考网上资料。读完此文,相信会对javaf反射机制有一个完整清楚的了解。尤其应该看看其他中代码举例部分。

    Java反射和动态代理实例

    几个Java反射和动态代理的小例子。可以学习如何通过Java的反射机制实例化对象、调用对象的方法、操作对象的私有成员变量、改变数组中的某项的值、改变数组大小等;可以学习Java的动态代理模式、学习Java工厂模式以及...

    java反射和动态代理实例

    Java反射和动态代理是Java编程中的高级特性,它们在实际开发中有着广泛的应用。反射机制允许我们在运行时检查类、接口、字段和方法的信息,甚至能够动态调用方法和修改对象的状态。动态代理则是在运行时创建一个实现...

    java 反射与动态代理

    Java反射和动态代理是Java编程中的重要特性,它们在实现高度灵活和动态的代码执行上发挥着关键作用。本文将深入探讨这两个概念及其在实际开发中的应用。 **Java反射** Java反射API允许程序在运行时检查类、接口、...

    java反射机制和动态代理的原理

    java反射机制和动态代理的原理,熟悉反射机制和动态代理

    JAVA的反射机制与动态代理

    Java的反射机制与动态代理是Java编程中两个非常重要的高级特性,它们在许多实际场景中发挥着关键作用,如框架开发、插件系统、元数据处理等。下面将详细讲解这两个概念及其应用。 首先,Java的反射机制允许我们在...

    JAVA 反射机制与动态代理ppt

    总的来说,Java反射机制和动态代理是Java平台强大而灵活的特性,它们使得Java程序能够在运行时具有更高的灵活性和可扩展性。然而,使用反射也可能带来性能开销和安全风险,因此在实际应用中需要权衡利弊,合理使用。

    Java反射机制和动态代理

    主要讲述Java反射机制与设计模式之一:代理模式的原理与应用;同时详细讲述了Java对代理模式的支持以及Java中动态代理的原理,应用与实践。

    JAVA反射机制与动态代理

    1. 动态代理原理:动态代理是基于Java反射机制,通过在运行时动态生成实现了特定接口的代理类,以此来实现对原对象的代理。 2. java.lang.reflect.Proxy类:Proxy类提供了创建动态代理类和代理对象的工厂方法。通过...

    经典java反射和动态代理代码

    Java反射和动态代理是Java编程中的重要特性,它们允许程序在运行时检查和操作类、接口、对象等的内部结构,以及动态地创建代理对象来处理特定任务。在这篇文章中,我们将深入探讨这两个主题,结合"reflections"这个...

    Java动态代理和Java反射的Demo演示

    接下来,我们讨论Java反射。反射是Java的一项强大的功能,它允许我们在运行时检查类、接口、字段和方法的信息,甚至可以在运行时创建和操作类的对象。`java.lang.Class`类是反射的核心,我们可以使用`Class.forName...

    Java反射机制与动态代理

    总结来说,Java反射机制和动态代理是Java编程中不可或缺的部分,它们极大地扩展了Java的灵活性和可扩展性,使得程序员可以在运行时对程序进行更深层次的控制。了解和熟练掌握这两项技术,对于提高Java开发能力和解决...

    JAVA反射与代理

    在"JAVA反射与代理"这个主题中,我们将深入探讨这两个核心概念。 首先,让我们了解反射的基本用法。当一个类的名称在运行时才被知道,反射可以帮助我们动态地创建对象。例如,我们可以使用`Class.forName()`方法...

Global site tag (gtag.js) - Google Analytics