AOP(Aspect-Oriented Programming)是一种将函数的辅助性功能与业务逻辑相分离的编程范式(programming paradigm),其目的是将横切关注点(cross-cutting concerns)分离出来,使得程序具有更高的模块化特性。
AOP体现原则:单一职责原则 和 开放封闭原则
假设我们有一个应用场景(见下图),假如我不想改变旧有的SayHello方法,在方法前面添加验证功能,后面添加写日志功能,那么要怎么做呢?就需要使用AOP的方式来实现此功能了。
常见的AOP实现方式有三种:中间件Middleware、过滤器Filter、代码织入(静态织入和动态代理)
1、中间件Middleware
请求管道包含一系列请求委托,依次调用。 下图演示了这一概念。 沿黑色箭头执行。
2、Filter
下图展示了过滤器类型在筛选器管道中的交互方式。
3、代码织入
第一种:静态织入,即:在编译时,就将各种涉及AOP拦截的代码注入到符合一定规则的类中,编译后的代码与我们直接在类中调用属性或方法前后增加代码是相同的,只是这个工作交由编译器来完成。
第二种:EMIT反射,即:通过Emit反射动态生成代理类,如使用Castle.DynamicProxy的AOP实现方式。