AOP

2019-07-09  本文已影响0人  上山走18398
简介
  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

上一篇下一篇

猜你喜欢

热点阅读