1、概述
1.1、代理模式的一种实现,静态代理与动态代理的区别:编译期是否确定代理对象;
1.2、JDK提供了Proxy类、InvocationHandler接口;
1.3、缺点:只针对接口;
2、案例
package com.an.bytecode.jdkdtdl;
/**
* @description:
* @author: anpeiyong
* @date: Created in 2020/4/7 15:03
* @since:
*/
public interface Person {
void say(String name);
}
package com.an.bytecode.jdkdtdl;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* @description:
* @author: anpeiyong
* @date: Created in 2020/4/7 15:02
* @since:
*/
public class MyHandler implements InvocationHandler {
@Override
public Object invoke(Object proxy, Method method, Object[] args){
System.out.println("执行的方法:"+method);
System.out.println("方法的参数:");
for (Object o:args) {
System.out.println(o.toString());
}
return null;
}
}
package com.an.bytecode.jdkdtdl;
import java.lang.reflect.Proxy;
/**
* @description:
* @author: anpeiyong
* @date: Created in 2020/4/7 15:02
* @since:
*/
public class Test {
public static void main(String[] args) {
MyHandler handler=new MyHandler();
Person personProxy=(Person) Proxy.newProxyInstance(Person.class.getClassLoader(),new Class[]{Person.class},handler);
personProxy.say("hello...");
}
}
结果:
执行的方法:public abstract void com.an.bytecode.jdkdtdl.Person.say(java.lang.String)
方法的参数:
hello...
原文:https://www.cnblogs.com/anpeiyong/p/12653822.html