InvocationHandler 接口位于 java.lang.reflect 反射包,搭配使用可以实现比较丰富的动态功能增减。
直接上代码:
一:必须有准备实现动态代理的Interface功能接口
public interface RunMethodInterface {
void runA();
void runB();
}
二:接口的实现类
public class RunMethod implements RunMethodInterface {
@Override
public void runA() {
System.out.println("RunMethod runA...");
}
@Override
public void runB() {
System.out.println("RunMethod runB...");
}
}
三:InvocationHandler 接口的自定义实现,主要在这里实现自定义的功能
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.UndeclaredThrowableException;
public class GbxInvocationHandler implements InvocationHandler {
private Object object;
public GbxInvocationHandler(Object object) {
this.object = object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object invoke = null;
try {
//执行目标方法前执行的任意逻辑
System.out.println("GbxInvocationHandler 方法前执行的自定义逻辑...");
//实现代理的对象方法执行
invoke = method.invoke(object, args);
//执行目标方法后执行的任意逻辑
System.out.println("GbxInvocationHandler 方法后执行的自定义逻辑...");
} catch (Exception e) {
System.out.println("GbxInvocationHandler 方法执行异常:" + e.getMessage());
e.printStackTrace();
}
return invoke;
}
}
四:调用方式
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class TestA {
public static void main(String[] args) {
RunMethodInterface runMethod = new RunMethod();
runMethod.runA();
runMethod.runB();
System.out.println("============================分割线============================");
//开始构建自定义代理
InvocationHandler gbxInvocationHandler = new GbxInvocationHandler(runMethod);
//成功创建目标对象的代理
RunMethodInterface proxyRunMethod = (RunMethodInterface) Proxy.newProxyInstance(gbxInvocationHandler.getClass().getClassLoader(), runMethod.getClass().getInterfaces(), gbxInvocationHandler);
//用代理对象调用相关方法,则执行目标方法和自定义代理中的相关逻辑
proxyRunMethod.runA();
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
proxyRunMethod.runB();
}
}
五:查看程序执行结果
RunMethod runA... RunMethod runB... ============================分割线============================ GbxInvocationHandler 方法前执行的自定义逻辑... RunMethod runA... GbxInvocationHandler 方法后执行的自定义逻辑... >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> GbxInvocationHandler 方法前执行的自定义逻辑... RunMethod runB... GbxInvocationHandler 方法后执行的自定义逻辑...
Over!
发布前,看到扯淡的官方提示,说质量低,不会获得推荐。好吧,能看到此博文的皆是有缘之人!



