spring之代理

### 什么是代理?

简单点讲,代理就是帮[目标对象]去完成它应该做,但是不想或者不擅长做的事情。

例子:

媒婆:帮你找对象。

黄牛:帮你去挂号。

社保代办:帮你缴纳社保。

* 对于动态代理的学习目标

* 了解代理对象是如何产生的?牵扯到Classloader的理解

* 会编写JDK和cglib的动态代理代码

* 了解代理对象和InvocationHandler实现类直接的关系(调用关系)

* 代理模式分为静态代理和动态代理

* 静态代理:就是编写一个代理类,去代理[目标对象]

* 动态代理:在运行期间,通过反射,对[目标对象]产生一个[代理对象]

* 动态代理的实现方式分为两种,下面两种方式生成的代理类都是继承了Proxy:

* JDK实现的      :基于接口的,也就是说[目标对象]必须实现一个接口,[目标对象]和[代理对象]都实现该接口

* 目录类必须实现接口

```

* 编写代理工厂类 implements InvocationHandler{

getProxy(target){return Proxy.newInstance(Classloader,interface,this)}

invoke(proxy,method,args)方法

}

* 生成的代理对象

public final void saveUser()

throws

{

try

{

this.h.invoke(this, m3, null); // h 就是上面的代理工厂类

return;

}

catch (Error|RuntimeException localError)

{

throw localError;

}

catch (Throwable localThrowable)

{

throw new UndeclaredThrowableException(localThrowable);

}

}

```

* cglib实现的 :可以被继承的普通类,它是通过继承的方式,产生一个子类,这个子类就是代理类

* 为什么使用动态代理呢?

增强对象的功能。这种增强,是符合开闭原则的,不会对目标对象进行修改,只需要扩展就可以实现增强

你可能感兴趣的:(spring之代理)