七、动态代理
package org.example.domain;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* 动态代理测试
*/
public class Cat implements JumpAble{
String name;
public Cat(String name) {
this.name = name;
}
@Override
public void jump() {
System.out.println("小猫"+this.name+"跳起来了");
}
public static void main(String[] args) {
Cat cat=new Cat("咪咪");
// 参数 1 需要一个能加载这些接口的类加载器
// 参数 2 指明代理了哪些接口
// 参数 3 指定自己实现的 InvocationHandler
JumpAble catJummpab= (JumpAble) Proxy.newProxyInstance(JumpAble.class.getClassLoader(), new Class[]{JumpAble.class},new MyInvocatioHandler(cat));
catJummpab.jump();
}
}
interface JumpAble{
void jump();
}
class MyInvocatioHandler implements InvocationHandler{
Object target;
public MyInvocatioHandler(Object target) {
this.target = target;
}
/**
* 使用代理对象执行任何方法都是在执行这个方法
* @param proxy 生成的代理实例对象
* @param method 执行的方法
* @param args 方法参数
* @return
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("我是动态代理");
method.invoke(target,args);
return null;
}
}
网友评论