多层代理模式解析Invocation

场景

试想一下,在另一种场景下看,需要使用JDK代理模式对最终目标对象实现增强。
例如,有一个目标对象A,框架需要提供一种能力,来实现对A的增强,所谓的增强,就是可以在执行A之前做一些事,执行A之后做一些事。这就是增强。
增强的实现:
1. 过滤器链的思想
2. SpringMVC拦截器思想,MVC的拦截器思想,总体来说不是一个链式执行的过程,虽然效果和调用栈一个样,但是在代码底层执行时不是嵌套增强,而是串行增强。
3. 代理增强。
场景;
有一个目标对象A,实现AI接口
插件提供一个接口Advice,实现了Advice接口的类可以动态对A对象实现嵌套式增强,多个增强可以指定顺序、需使用代理模式实现。

    Advice1
        Advice2
            Target... 嵌套式调用,再每一个增强中调用下一个增强。

    既然是这种设计,那么肯定有一个地方,将这个嵌套逻辑代码给组装起来,并且每一个增强器都可以直接或者间接调用到下一个增强器。
    也就是框架需要具备这种能力。

  设计思想:既然是基于接口调用实现增强,那么需要使用JDK动态代理对代理对象生成多种代理。每一层代理增强都是嵌套实现前后置增强。而且这个增强还得靠用户控制。
        基于原始对象生成代理对象后,这个代理对象获取接口也是生成这个代理对象时的实现接口。
代码实现
public interface TargetInterface {
   

    public void doTarget();

}
public class TargetObject implements TargetInterface {
   

    public void doTarget() {
   
        System.out.println("目标对象执行");
    }

}
public interface Advice {
   

    /*
         给每一个增强器设置下一个增强器调用栈
     */
    public Object doAdvice(TargetInvoke targetInvoke) throws Throwable
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值