概念

  • Aspect-Oriented Programming(AOP):想想OOP是不是有些熟悉,AOP翻译过来的意思就是面向切面编程。先来关注一下涉及到的以下几个概念点。

  • 横切关注点:
    存在于项目的绝大多数业务中可以通用的一些辅助性的功能。例如日志、安全、持久化等模块。它们存在于核心业务代码块的各个地方,却又独立于这些核心业务逻辑。
    如图所示:


    Paste_Image.png

  • 切面:
    这些横切关注点的统一抽象。

  • 所以面向切面编程,就是将项目的辅助性功能(如日志、异常处理、缓存处理等)与业务逻辑进行分离,把繁琐的辅助性代码抽离出来不用重复Copy,使得程序具备更高的模块化。


实现方式

  • 静态织入
    即编译时织入,实现原理是对编译器做扩展,使得在代码编译时编译器将切面代码织入到指定的切点。

  • 动态织入
    即运行时织入,编译器在编译时对切面代码和业务代码分别独立编译,而在运行的时候由CLR进行代码混合。


.Net平台的切面实现——PostSharp