实现模型:
业务组件
业务处理器
代理
客户端
业务组件:
public interface BusinessFacade {
void say();
}
public class BusinessFacadeImpl implements BusinessFacade {
public void say() {
System.out.println("hello interceptor");
}
}
业务处理器
public class InterceptorClass {
public void preHandler() {
System.out.println("before");
}
public void postHandler() {
System.out.println("before return modelAndview");
}
}
代理:
public class DynamicProxyHandler implements InvocationHandler {
private BusinessFacade facade;
private InterceptorClass interceptor = new InterceptorClass();
public BusinessFacade bind(BusinessFacade facade) {
this.facade = facade;
return (BusinessFacade) Proxy.newProxyInstance(this.getClass().getClassLoader() , facade.getClass().getInterfaces() , this);
}
/**
*
* @param proxy : 代理类的实例
* @param method : 需要执行的方法
* @param args : 需要执行的方法的参数
* @return
* @throws Throwable
*/
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
interceptor.preHandler();
Object result = method.invoke(facade , args);
interceptor.postHandler();
return result;
}
}
客户端:
public class Client {
public static void main(String[] args) {
BusinessFacade facade = new BusinessFacadeImpl();
DynamicProxyHandler proxy = new DynamicProxyHandler();
BusinessFacade businessFacade = proxy.bind(facade);
businessFacade.say();
}
}

image.png
todo:执行businessFacade.say(),是怎么执行invoke方法的? 需要看Proxy的源码。