java中的动态代理

一个典型的动态代理可分为以下四个步骤:

1.创建抽象角色

2.创建真实角色

3.通过实现InvocationHandler接口创建中介类

4.通过场景类,动态生成代理类

package proxy.test;

//抽象角色

public interface Icode {

void doSomething(String name);

}


package proxy.test;

//真实角色

public class JavaCode implements Icode{

private  String jname;

public JavaCode(String jname){

this.jname = jname;

}

@Override

public void doSomething(String name) {

System.out.println(jname+" implemented name "+name+" in JavaCode!");

}

}


//动态代理类(一个位于代理类与委托类之间的中介类),需要实现InvocationHandler接口

public class CoderDynamicProxy implements InvocationHandler{

//被代理的实例

private  Icode code;

public CoderDynamicProxy(Icode code){

this.code = code;

}

@Override

public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {

System.out.println("代理前:"+System.currentTimeMillis());

Object result = method.invoke(code, args);

System.out.println("代理后:"+System.currentTimeMillis());

return result;

}

}


import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Proxy;

public class DynamicProxyTest {

public static void main(String[] args) {

//要代理的真实的对象

Icode code = new JavaCode("张三_java");

//创建代理类实例

InvocationHandler hander = new CoderDynamicProxy(code);

//获取类加载器

ClassLoader cl= Icode.class.getClassLoader();

//动态产生一个代理类

Icode  proxy = (Icode) Proxy.newProxyInstance(cl,code.getClass().getInterfaces(),hander);

//通过代理类执行Javacode具体实现的doSomething()方法

proxy.doSomething("update project");

}

}

你可能感兴趣的:(java中的动态代理)