动态代理 例子

package xinhuiji_day09

**********************************定义代理类**********************************************
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
//动态代理
public class MyInvocationHandler implements InvocationHandler {
    private Object obj = null;            //真实主题
    public Object Bind(Object obj){   //绑定真是操作主题
        this.obj = obj;
        return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
                obj.getClass().getInterfaces(), this);    //取得代理对象
    }
    @Override
    public Object invoke(Object arg0, Method arg1, Object[] arg2)
            throws Throwable {               //动态调用方法
        Object temp = arg1.invoke(this.obj, arg2);        //调用方法,传入真实主题和参数
        return temp;                  //返回方法的返回信息
    }
}
/*
    在MyInvocationHandler类的Bind方法中接受被代理的对象的真是主题实现,之后覆写InvocationHandler接口的invoke方法
    完成具体的方法调用
 * */

********************************定义接口**************************************

package xinhuiji_day09;

public interface Subject {
    String say(String name,int age);

}
******************************定义真实主题实现类************************************

package xinhuiji_day09;

public class RealSubject implements Subject{

@Override
    public String say(String name, int age) {
        return "姓名: "+name+" 年龄: "+age;
    }
}
***********************测试*********************************

package xinhuiji_day09;

public class Test {

public static void main(String[] args) {
        // TODO Auto-generated method stub
        MyInvocationHandler my = new MyInvocationHandler();

Subject sub = (Subject) my.Bind(new RealSubject());

String info = sub.say("han", 23);
        System.out.println(info);

}

}

动态代理 例子

时间: 2024-08-02 11:24:00

动态代理 例子的相关文章

JDK动态代理例子

JDK动态代理的代理类必须实现于接口.如果要代理类,则使用CGLIB代理. 先定义一个接口: public interface Character { public void show(); } 接着定义一个类: public class A implements Character{ @Override public void show() { // TODO Auto-generated method stub System.out.println("this is A"); }

String Aop 动态代理例子

动态代理原理:spring AOP采用动态代理来实现 (1)定义一个接口Boy package aop001; public interface Boy { public void beat(String time); public void play(String time); } (2)定义两个类实现Boy接口: Boy_1 package aop001; public class Boy_1 implements Boy { @Override public void beat(Strin

spring源码学习之【准备】cglib动态代理例子

一:委托者 1 package com.yeepay.porxy.cglib.test; 2 3 import java.util.HashMap; 4 import java.util.Map; 5 6 /** 7 * 目标类,(委托类) 8 * @author shangxiaofei 9 * 10 */ 11 public class PaymentServer { 12 13 public Map<String, String> payMoney(String name,Integer

【JAVAWEB学习笔记】25_基础加强:类加载器、注解 @xxx和动态代理

基础加强 学习目标 案例-自定义单元测试@MyTest 案例-全局的编码的解决 一.类加载器 1.什么是类加载器,作用是什么? 类加载器就加载字节码文件(.class) 2.类加载器的种类 类加载器有三种,不同类加载器加载不同的 1)BootStrap:引导类加载器:加载都是最基础的文件 2)ExtClassLoader:扩展类加载器:加载都是基础的文件 3)AppClassLoader:应用类加载器:三方jar包和自己编写java文件 怎么获得类加载器?(重点) ClassLoader 字节码

Java中动态代理技术生成的类与原始类的区别 (转)

用动态代理的时候,对它新生成的类长什么样子感到好奇.有幸通过一些资料消除了心里的疑惑. 平时工作使用的Spring框架里面有一个AOP(面向切面)的机制,只知道它是把类重新生成了一遍,在切面上加上了后来定义的逻辑.这样就达到了动态的在原有类上增加一些功能.比如日志打印,拦截信息等. 这里只关心动态代理技术生成新的类,先不管虚拟机是如何去生成类,用了什么字节码生成技术,怎么产生字节码等这一系列动作.现在只关心最后生成的新类长什么样,它和老类有什么区别.为了获取到生成后的代理类的字节码并且反编译成我

Java中动态代理实现原理深究

一.前言 笔者平时开发使用"动态代理"不多,最近在看设计模式的时候,"动态代理"又在面前晃了几次,所以这次想从源码的角度去分析动态代理的实现原理,以窥探其精妙~ 二.正文 2.1 静态代理  本文源码基于:jdk1.6.0_33 在正式剖析动态代理的源码之前,我们可以先来看看"静态代理"(就是我们普通的代理模式)的UML图: 从上图可以看出,代理类"ProxySubject"和被代理类"RealSubject&quo

Java 动态代理分析

Java的代理有两种:静态代理和动态代理,动态代理又分为 基于jdk的动态代理 和 基于cglib的动态代理 ,两者都是通过动态生成代理类的方法实现的,但是基于jdk的动态代理需要委托类实现接口,基于cglib的动态代理不要求委托类实现接口. 接下来主要分析一下基于jdk的动态代理的实现原理. 一 动态代理例子 首先来看一个动态代理的例子: # 测试类,主要功能是生成代理类并调用代理方法 TargetFactory.javapublic class TargetFactory { public

Java动态代理学习

动态代理类 Java动态代理类位于java.lang.reflect包下,一般主要涉及到以下两个类: 1.Interface InvocationHandler 该接口中仅定义了一个方法: Object invoke(Object proxy, Method method, Object[] args) 在实际使用时,第一个参数obj一般是指代理类,method是被代理的方法,如上例中的request(),args为该方法的参数数组(无参时设置为null). 这个抽象方法在代理类中动态实现. 2

java 基础 --- 动态代理和静态代理

问题  : 代理的应用场景是什么 动态代理的底层原理是什么,为什么只能继承接口 概述 代理模式是设计模式的一种,简单地说就是调用代理类的方法实际就是调用真实类的方法.这种模式在AOP (切面编程)中非常常见,使用的场景比如事务,网络代理等.他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等.本文将会介绍代理的两种方式 : 静态代理和动态代理. 静态代理 :由程序员创建或特定工具自动生成源代码,也就是在编译时就已经将接口,被代理