小鸦-spring AOP的小模拟

首先, 为什么要用AOP?

不用AOP的话, 我们需要手动添加大量重复代码不同类的 method

结论, 它作用就是 动态的复制+粘帖

我们需要做的是
1. 不改变原来的class以及其method
2. 让class增加其他功能
3. 动态

这三点结合起来, 在字节码上操作是不可能, 也就只能创造一个class.
1. 原本功能 记做 origin.Method();
2. 额外功能 记做 extra.before(), extra.after();

这种做法, 就已经很自然可以想到 代理模式了

//这种想法实现,首先我们要一个代理类
public AOPproxy implement originInterface{

Object extra;//以及set功能
originInterface origin;//以及set功能

    Method(){
        extra.before();
        origin.Method();
        extra.after();
    }
}

//这里的originInterface, 是为了让其他类调用时, 不会感觉到异常, 类似继承的功能

从上面, 我们就可以看到, 剩下要做啥?
1. extra要动态
2. origin要动态

动态, 常规做的两点
1. 配置文件 (e.g. xml文档)
2. 一堆烦人的反射
3. 一个平台(Spring)执行操作

现在, 我们主要要解决的是烦人的反射
1. 动态代理, 帮我们解决origin动态的问题
2. 我们就只需要关注 动态代理extra类 怎么实现就可以了

//改一下接口,就变成动态代理了
public AOPproxy implement InvocationHandler {

Object extra;//以及set功能

@override
 public Object invoke(Object proxy, Method method, Object[] args){
        extra.before();
        Object result = method.invoke(target, args);
        extra.after();
    }
}

extra类的操作, 根据配置文档, 获得class, 再找到对应的method, 再调用方法就可以了… (= =)


扩展阅读:
动态代理模式: https://www.ibm.com/developerworks/cn/java/j-lo-proxy1/

吐槽: 本来不想改的..被面试官问到且无法流畅回答, 只能这样写, 以后被免的时候直接拿出来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值