面向切面编程(AOP)经过提供另外一种思考程序结构的方式来补充面向对象编程(OOP),准确来讲是一种编程思想,并不局限于某一种语言。编程
OOP中模块化的关键单元是类,而在AOP中模块化单元是切面。切面实现了诸如跨越多种类型和对象的事务管理之类的关注点的模块化。缓存
Aspect(切面):跨越多个类的关注点的模块化。事务管理是企业Java应用程序中横切关注点的一个很好的例子。在Spring AOP中,方面是使用常规类( schema-based approach )或使用 @Aspect 注释( @AspectJ style )注释的常规类实现的。性能优化
Joinpoint(链接点):在程序执行过程当中的某个阶段点,它其实是对象的一个操做,例如方法的调用或异常的抛出。在 Spring AOP中,链接点就是指方法的调用。app
Pointcut(切入点):是指切面与程序流程的交叉点,即那些须要处理的链接点,以下图程序流程所示。一般在程序中,切入点指的是类或方法名,如某个通知要应用到全部以add开头的方法中,那么全部知足这一规则的方法都是切入点。框架
Advice(通知/加强处理):AOP 框架在特定的切入点执行的加强处理,即在定义好的切入点处所要执行的程序代码。能够将其理解为切面类中的方法,它是切面的具体实现。模块化
Target Object(目标对象):是指全部被通知的对象,也称为被加强对象。若是AOP框架采用的是动态的AOP实现,那么该对象就是一个被代理对象。性能
Proxy(代理):将通知应用到目标对象以后,被动态建立的对象,是代理对象。在Spring Framework中,AOP代理将是JDK动态代理或CGLIB代理。优化
Weaving(织入):将切面代码插入到目标对象上,从而生成代理对象的过程。这能够在编译时(例如,使用AspectJ编译器),加载时间或在运行时完成。与其余纯Java AOP框架同样,Spring AOP在运行时执行编织。代理
AOP适用多模块系统横切联系,统一处理,具体能够在下面的场景中使用:调试
Authentication 权限
Caching 缓存
Context passing 内容传递
Error handling 错误处理
Lazy loading 懒加载
Debugging 调试
logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Performance optimization 性能优化
Persistence 持久化
Resource pooling 资源池
Synchronization 同步
Transactions 事务