代理接口

来源:互联网 发布:淘宝隐藏导航代码 编辑:程序博客网 时间:2024/05/22 03:13

18.1新建一个Demo2的接口;

package com.eduask.entity4;

//定义Demo2的接口;

public interface Demo2 {

void id();

void name();

void pwd();

}

18.2新建一个Demo2Impl类实现Demo2的接口;

package com.eduask.entity4;

//定义一个Demo2Impl的实现Demo2接口;

public class Demo2Impl implements Demo2 {

@Override

public void id() {

System.out.println("Demo2 id");

}

@Override

public void name() {

System.out.println("Demo2 name");

}

@Override

public void pwd() {

System.out.println("Demo2 pwd");

}

}

18.3 新建一个代理LogDynamicProxy类;

package com.eduask.entity4;

import java.lang.reflect.InvocationHandler;

import java.lang.reflect.Method;

import java.lang.reflect.Proxy;

public class LogDynamicProxy implements InvocationHandler {

private Object targer;//定义一个代理对象;

//设置代理方法,并设置对象值;

public static Object getDynamicProxy(Object obj){

LogDynamicProxy proxy=new LogDynamicProxy();

proxy.targer=obj;

//返回新生成实例化; 参数1 对象加载 参数2 对象接口 参数3 对象;

return Proxy.newProxyInstance(obj.getClass().getClassLoader(),obj.getClass().getInterfaces(), proxy);

}

//重写invoke方法;

@Override

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

throws Throwable {

//输出获得方法的名字;

System.out.println("你执行了"+method.getName()+"的方法");

//获得方法的执行;

Object obj=method.invoke(targer, args);

return obj;

}

}

18.4 新建一个TestDemo2

package com.eduask.entity4;

//使用动态代理测试;

public class TestDemo2 {

public static void main(String[] args) {

Demo2 d2=new Demo2Impl();

Demo2 proxy=(Demo2) LogDynamicProxy.getDynamicProxy(d2);

proxy.id();

proxy.name();

proxy.pwd();

}

}

18.5 程序运行如下:

你执行了id的方法
Demo2 id
你执行了name的方法
Demo2 name
你执行了pwd的方法
Demo2 pwd

0 0
原创粉丝点击