面向切面编程AOP,面向对象编程OOP,面向接口interface编程

AOP是Aspect Oriented Programming的缩写,中译文为面向切向编程。

OOP,即ObjectOriented Programming,面向对象编程。

  OOP和AOP都是方法论。我记得在刚学习C++的时候,最难学的并不是C++的语法,而是C++所代表的那种看问题的方法,即OOP。同样,今天在AOP中,我发现其难度并不在利用AOP干活,而是从AOP的角度来看待问题,设计解决方法。这就是为什么我特意强调AOP是一种方法论的原因!
  在OOP的世界中,问题或者功能都被划分到一个一个的模块里边。每个模块专心干自己的事情,模块之间通过设计好的接口交互。OOP的精髓是把功能或问题模块化,每个模块处理自己的家务事。但在现实世界中,并不是所有问题都能完美得划分到模块中。

  面向切面编程,实际上就是通过预编译或者动态代理技术在不修改源代码的情况下给原来的程序统一添加功能的一种技术。我们看几个关键词,第一个是“动态代理技术”,这个就是Spring Aop实现底层技术。第二个“不修改源代码”,这个就是Aop最关键的地方,也就是我们平时所说的非入侵性。。第三个“添加功能”,不改变原有的源代码,为程序添加功能。

  基于ROOT社区著名开源项目Xposed改造剥离了ROOT部分,演化为服务于所在应用自身的AOP框架。它支撑了阿里大部分App的在线分钟级客户端bugfix和线上调试能力。无侵入运行期AOP框架Dexposed,该框架基于AOP思想。
  Dexposed的AOP实现是完全非侵入式的,没有使用任何注解处理器,编织器或者字节码重写器。Dexposed实现的hooking,不仅可以hook应用中的自定义函数,也可以hook应用中调用的Android框架的函数。
  AOP(Aspect Oriented Programming),也就是面向方面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
  AOP一般应用在日志记录,性能统计,安全控制,事务处理,异常处理等方面,它的主要意图是将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
  Dexposed支持从Android2.3到4.4(除了3.0)的所有dalvid运行时arm架构的设备,稳定性已经经过实践检验。

-- Dexposed典型的使用场景:
1.AOP编程
2.插桩(例如测试,性能监控等)
3.在线热更新,修复严重的,紧急的或者安全性的bug
4.SDK hooking以提供更好的开发体验

无侵入的运行期AOP框架Dexposed- https://github.com/alibaba/dexposed

Xposed框架实现- https://github.com/rovo89/Xposed
方便的打印函数调用和耗时日志,Method call logging based on dexposed- https://github.com/promeG/XLog
A lightweight android logger support auto tag, file logging and show logs on screen- https://github.com/allenz8512/zlog


如何在Android Gradle中添加原生so文件依赖- https://www.jianshu.com/p/20cee429d1c3
键值数据库(NoSQL)A key-value database for Android- https://github.com/nhachicha/SnappyDB/
Jake Wharton写的Gradle插件,下载和管理Android SDK- https://github.com/JakeWharton/sdk-manager-plugin


 基于AOP和AspectJ的日志自动埋点方法 统计app的一些日志 android上使用aspectj在编译期更改日志类的字节码达到相似目的;android的AOP框架打日志;安卓的日志类(android.util.Log)只提供日志输出功能,并无提供日志过滤、文件记录等常用功能.
深入理解Android之AOP(AspectJ)- https://blog.csdn.net/innost/article/details/49387395
AspectJ- http://www.eclipse.org/aspectj/ 
  Spring Aop的底层技术使用了动态代理。AOP核心调用过程,通过调用AOP代理类,开始一个一个调用后面的(前置)通知/拦截器链条,完成之后在调用目标方法,最后回来的时候接着调用(后置、结束)通知/拦截器链条。
jdk动态代理、cglib动态代理。

徒手撸框架--实现Aop- https://segmentfault.com/a/1190000013029652

猜你喜欢

转载自blog.csdn.net/shareus/article/details/80275674