- 代理:在不修改源码的情况下使的原本不具有某种行为能力的类,对象具有该种行为能力,实现了对目标对象的功能拓展。
- 静态代理
- 抛出一个观念,用户--------秘书-------老板。这里秘书就相当于代理类,代理老板执行很多非核心业务,进行增强的功能。老板就是被代理类(目标类),做一些主要的工作。
- 代理类和目标类他们都需要实现同一个接口,当用户有什么请求的时候,首先会经过代理类的筛选,增强(日志输出,鉴权),然后才会调用目标类中的核心方法。
- 然后在main方法中分别new创建代理对象,和被代理对象(这个是被当做参数调用目标类中的方法时用到),
RealSubject realSubject = new RealSubject(); ProxySubject proxy = new ProxySubject(realSubject); proxy.request();
这个时候就出现问题了,只有实现同一个接口之后,代理对象才能接收该被代理参数,所以只能代理某一类型接口的实例,不能代理任意接口任意方法的操作。
- 弊端:一个接口(这个接口就是Service接口)的目标类就需要一个代理类代码冗余。
- jdk动态代理
- 请求进来,会先请求你的代理类(是jvm生成的,不是自己写的.class)
- 代理类调用InvocationHandler的实现类
- 通过反射调用目标类
静态代理,jdk,cglib动态代理
于 2023-08-09 23:34:01 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)