一、动态代理
1、计算机中的代理:
①.可以想象一下鸡蛋是怎么回事,我们真正要调用的是蛋黄,因为我们不能直接调用,要通过鸡蛋壳才可以调用,蛋壳与蛋黄的命名方法一致,所以我们调用的是蛋壳上的方法,再通过鸡蛋壳调用蛋黄中真正工作的方法,返回给蛋壳然后再通过蛋壳返回到我们手上,可以想一下有中间商可以做很多小动作,就可以在中间加很多逻辑,通过蛋壳调用蛋黄的路上加入的逻辑,就叫前置通知,而通过蛋黄返回到蛋壳加入的逻辑叫后置通知,如果两个都加了则是循环通知。
这就是代理,想象一下鸡蛋怎么回事就好了
②.计算机中的代理示意图
2、动态代理
①.则想象,蛋壳上没有东西,通过动态代理的方式在蛋壳上动态的生成代理
3、基于JDK中动态代理实现
①.基于JDK中动态代理实现中有两重要的类:lnvocationHandler 、Proxy
lnvocationHandler
是代理实例的调用处理程序实现的接口。每个代理实例都具有一个关联的调用处理程序。对代理实例调用方法时,将对方法调用进行编码并将其指派到它的调用处理程序的invoke方法。
Proxy
JDK中动态生成代理类的工具类
定义一个接口(基于JDK的动态代理只能使用接口)
public interface ISubject {
void hello(String param);
}
为接口定义实现类
public class SubjectImpl implements ISubject {
@Override
public void hello(String param) {
System.out.println("hello " + param);
}
}
实现一个代理类
public class JDKProxy implements InvocationHandler {
private Object target;
public JDKProxy(Object target) {
this.target = target;
}
public Object newProxy() {
return (ISubject)Proxy.newProxyInstance(
tar