动态代理是在运行时动态生成类字节码,并加载到 JVM 中
你通过Proxy
类的 newProxyInstance()
创建的代理对象在调用方法的时候,实际会调用到实现InvocationHandler
接口的类的 invoke()
方法.
运行时的动作由invoke()方法决定控制。
其中运用了反射的相关知识来实现。
第一步:创建接口
public interface people {
void eat();
}
第二步:实现接口
public class boy implements people{
@Override
public void eat() {
System.out.println("eat");
}
}
第三步:写一个代理类,顺便把main函数放在里面测试一下
public class chief {
public static people cook(people boy){
people people = (people) Proxy.newProxyInstance(chief.class.getClassLoader(), new Class[]{people.class}, new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("chief cooking");
method.invoke(boy,args);
return null;
}
});
return people;
}
public static void main(String[] args) {
people people = chief.cook(new boy());
people.eat();
}
}
成功运行: