AOP

作者: 上山走18398 | 来源:发表于2019-07-09 07:34 被阅读0次
    简介
    1. AOP即面向切面编程
    2. 纵向关系OOP与横向切面AOP对比
    3. AOP的实现
    4. AOP的优缺点
      AOP的目标是把这些功能集中起来(把涉及到众多模块的某一类问题抽取出来),放到一个统一的地方来控制和管理
      利用AOP的思想,这样对业务逻辑的各个部分进行隔离,从而降低业务逻辑各部分之间的耦合,提高程序的可重用性,提高开发效率,统一管理
    5. AOP的应用场景
    日志模块设计
    1. OOP设计模式
    OOP世界中,每个功能放在一个模块里,把功能或者问题模块化
    编写一个打印日志LogUtils类,然后在需要打印的地方导入引用即可,那如果日志模块的API修改呢???
    优缺点:横跨并嵌入多个模块中,耦合严重,分散得很厉害,不便于管理
    1.1  需要对现有的对象动态增加某种行为或者方法时非常困难;
    
    
    1. AOP设计思路
      无需再到处调用LogUtils,声明哪些地方需要打印日志,这个地方就是一个切面
      AOP的目标是把这些功能集中起来,放到一个统一的地方来控制和管理
    //只需要声明哪些方法需要打印log,打印什么内容
    public class ClassA{
        @Log(msg = "onInitView")
        private void initView(){}
    
    
    }
    
    应用场景

    只要系统的业务模块需要引用通用模块,就可以使用AOP
    1. 参数校验和判空

    可以提前处理入参数据的异常,并封装好异常转化成结果对象返回给调用方,也让业务逻辑解耦变得独立

    2. Android API 23+ 的权限控制

    避免到处都是申请权限和处理权限的代码

    3. 无痕埋点

    4. 安全控制

    比如全局的登录状态流程控制

    5. 日志记录

    6. 事件防抖

    7. 性能统计

    可以采用AOP思想对每个方法做一个切点,在执行之后打印方法耗时

    8. 事务处理

    声明方法,为特定方法加上事务,指定情况下(比如抛出异常)回滚事务

    9. 异常处理

    替代防御性的try - catch

    10. 缓存

    缓存某方法的返回值,下次执行该方法时,直接从缓存里获取

    11. 软件破解

    12. 热修复

    AOP可以让我们在执行一个方法的前插入另一个方法,运用这个思路,可以把有bug的方法替换成我们下发的方法

    AOP方法实现

    静态代理
    动态代理

    1. 考虑要在什么期间插入代码(编译,运行),选用合适的AOP方法
    2. 找准切点也就是代码可注入的点,比如一个方法的调用处或者方法内部
    3. 接着考虑怎么过滤方法,
    4. 过滤以后要以怎样的方式处理代码,执行前,执行后,还是包裹代码,还是替换目标代码

    @AspectJ

    参考链接:
    https://www.jianshu.com/p/0799aa19ada1

    相关文章

      网友评论

          本文标题:AOP

          本文链接:https://www.haomeiwen.com/subject/gfxhoqtx.html