Java反射机制动态代理

package com.kaige123;/**
 * 程序员
 * @author 凯哥
 */public interface Chengxuyuan {    /**
     * 写代码方法
     */    public void xiedaima();
}
package com.kaige123;/**
 * 程序员接口实现类
 * @author 凯哥
 */public class ChengxuyuanImpl implements Chengxuyuan {    public void xiedaima() {
        System.out.println("写代码...");
    }
}
package com.kaige123;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method; /**
 * 处理类
 * @author 凯哥
 */public class CxyHandler implements InvocationHandler {    //程序员实现对象传递    private Chengxuyuan c;    public CxyHandler(Chengxuyuan c) {        this.c = c;
    }    /**
     * 程序员接口的方法只要被调用就会通知到吃方法上
     * @param proxy 代理对象
     * @param method 告诉你 调用的方法 封装对象
     * @param args 参数
     */    public Object invoke(Object proxy, Method method, Object[] args)            throws Throwable {
        System.out.println("方法名称:"+method.getName());
        System.out.println("喝个咖啡,先把衣服穿上");
        Object obj=method.invoke(c, args);//调用方法        System.out.println("衣服脱了,继续喝咖啡");
        return obj;
    }
}
package com.kaige123; import java.lang.reflect.Method;import java.lang.reflect.Proxy;/**
 * 测试类
 * @author 凯哥
 *
 */public class Test {    public static void main(String[] args) {        //实现类对象        ChengxuyuanImpl chengxuyuanImpl = new ChengxuyuanImpl();        //得到反射类        Class classs = chengxuyuanImpl.getClass();        //创建处理类 然后把实现类对象传递        CxyHandler handler = new CxyHandler(chengxuyuanImpl);        //开始创建代理对象 然后把代理对象转换成接口类型        Chengxuyuan chengxuyuan = (Chengxuyuan) 

                Proxy.newProxyInstance(
                        classs.getClassLoader(),
                        classs.getInterfaces(),
                        handler);        //调用方法  有如  >>>invoke(Object proxy, Method method, Object[] args)  >> xiedaima() >>调用完毕        chengxuyuan.xiedaima();

    }

}

结果:

方法名称:xiedaima
喝个咖啡,先把衣服穿上
写代码...
衣服脱了,继续喝咖啡i
时间: 2024-12-10 00:45:46

Java反射机制动态代理的相关文章

java反射与动态代理

Java反射与动态代理 Java反射机制可以动态地获取类的结构,动态地调用对象的方法,是java语言一个动态化的机制.java动态代理可以在不改变被调用对象源码的前提下,在被调用方法前后增加自己的操作,极大地降低了模块之间的耦合性.这些都是java的基础知识,要想成为一名合格的程序猿,必须掌握! Java反射机制 JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的功能称为

java反射实现动态代理

参考:http://www.cnblogs.com/rollenholt/archive/2011/09/02/2163758.html http://my.oschina.net/lyp3314/blog/136589 反射可以通过class来创建对象或者修改对象.这样就提供了一个操作对象的方法. 下面拷贝前辈的总结: <反射机制> 为了更好的理解java的反射机制,最好先对java的泛型有所了解.java泛型就是参数化类型,即为所操作的数据类型指定一个参数.如果只指定了<?>,

java反射与动态代理的理解

一.什么是反射机制? 反射的官方定义是这样的:在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法,对任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息及动态调用类对象方法的功能称为java的反射机制. 讲的通俗一点的话就是,对于jvm来说,.java文件必须要先编译为.class文件才能够被jvm执行,所以在编译为.class文件的过程中,对象的类型都会被指定好,比如说 User user.那么如果说我想在代码运行的过程中获取到对象的类型呢?或者说程序在运行过程

Java反射以及动态代理(上)

在常用的各种框架中,反射与动态代理很常见,也很重要.本篇就对这一小节的内容基础性地总结. 首先需要了解什么是类型信息,以及RTTI与反射的关系与区别. Java中,使用Class对象来表示所有类的对象.利用Class对象来获取类中的成员变量,构造函数以及方法,这些内容我们称之为类型信息.RTTI的含义是,在运行时识别一个对象的类型,但有一个前提,就是类型在编译时必须已知,这样才能用RTTI识别,并利用这些信息做一些有用的事情.但是如果在编译时,程序没有办法获知到这个对象所属的类,怎样才能使用这个

Java反射以及动态代理(下)-- 源码

承接上篇,本篇就主要介绍动态代理的实现机制. 首先说说怎么去实现一个动态代理.还是可以用一个接口,两种实现来概括,但是代理中的实现并不明显,后面详细看看源码. 接口: package com.changjiang.test.RFP01.testProxy; public interface DynamicInterface { public void testNoArgs(); public String testOneArgs(String name); } 原始实现类: package co

反射机制-动态代理

目标: 掌握代理机制的作用 掌握InvocationHandler接口,和Proxy类的作用. 具体内容 代理设计,一个操作的接口有两个子类,其中一个是真实主题的实现类.另一个是代理实现类. 可以复习之前的代理设计模式: 接口与抽象类的应用(包括各自设计模式) 代理实现类需要完成比真实主题实现类更多的内容,而且本身还需要处理一些与具体业务有关的程序代码. 普通代理实例: package 类集; interface Subject{ public String say(String name,in

Java反射和动态代理

反射 通过反射的方式Class.forName("com.ahu.Person")可以获取class对象的实例以及其中的属性.方法.构造函数等 动态代理 动态代理:在不修改原业务的基础上,基于原业务方法,进行重新的扩展,实现新的业务. 例子: 1. 旧业务 买家调用action,购买衣服,衣服在数据库的标价为50元,购买流程就是简单的调用. 2. 新业务 在原先的价格上可以使用优惠券,但是这个功能在以前没有实现过,我们通过代理类,代理了原先的接口方法,在这个方法的基础上,修改了返回值.

java反射机制中的动态代理

java反射机制中的动态代理 动态代理模式及其使用 步骤1:定义一个接口 //接口 interface Subject{ void action(); } 步骤2:定义一个接口的实现类,也就是被代理类 //被代理类 class RealSubject implements Subject { @Override public void action() { System.out.println("我是被代理类,请执行我"); } } 步骤3:定义一个实现InvocationHandle

java反射机制与动态代理

在学习HadoopRPC时,用到了函数调用,函数调用都是采用的java的反射机制和动态代理来实现的,所以现在回顾下java的反射和动态代理的相关知识. 一.反射 JAVA反射机制定义: JAVA反射机制是java程序在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法:这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制. 反射就是把Java类中的各种成分映射成相应的Java类. Java反射机制主要提供了以下功能: 1