为什么我们使用动态代理
package com.zmd.dynamicProxy; /** * @ClassName Person * @projectName: object1 * @author: Zhangmingda * @description: XXX * date: 2021/5/16. */ public interface Person { void walk(); void sayHello(String name); }
2,定义自定义的InvocationHandler 继承InvocationHandler:
package com.zmd.dynamicProxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; /** * @ClassName MyInvocationHandler * @projectName: object1 * @author: Zhangmingda * @description: XXX * date: 2021/5/16. */ public class MyInvocationHandler implements InvocationHandler { @Override public Object invoke(Object o, Method method, Object[] objects) throws Throwable { System.out.println("=======正在执行方法:"+ method.getName()); if (objects != null) { System.out.println("下面为传入的参数:"); for (Object arg : objects) { System.out.println(arg); } } else { System.out.println("没有传入任何的参数"); } return null; } }
3,调用测试:
package com.zmd.dynamicProxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; /** * @ClassName MyInvocationTest * @projectName: object1 * @author: Zhangmingda * @description: XXX * date: 2021/5/16. */ public class MyInvocationTest { public static void main(String[] args) { InvocationHandler invocationHandler = new MyInvocationHandler(); Person person = (Person) Proxy.newProxyInstance(Person.class.getClassLoader(),new Class[]{Person.class},invocationHandler); person.walk(); person.sayHello("美女"); } }
java 编程基础 Class对象 反射:动态代理 和AOP
原文:https://www.cnblogs.com/zhangmingda/p/14775210.html