AOP初步

一刀切的AOP基础

软件开发的目的,最终是为了解决各种需求,包括业务和系统的,使用OOP可以对业务需求等普通关注点进行很好的抽象和封装,并且使之模块化。
但OOP却无法解决类似于日志、安全、事务等系统需求的实现在系统中各处散落的问题。

AOP是一种理念,需要一种现实的方式,将实现AOP理念的语言为AOL(Aspect-Oriented Language),可以与业务系统实现语言相同,比如Java,也可以不同,比如AspectJ是扩展自Java的一种AOL

Weave(织入)过程

“飞架”AOP和OOP的桥,在Spring中是一组类来完成,ProxyFactory
囿于现实中AOP技术实现上的尴尬,AOL实现的AOP各个概念实体,最终都需要某种方式集成到系统实现语言所实现的OOP实体组件中。

  • 静态AOP时代
    通过特定的编译器,将实现后的Aspect编译并织入到系统的静态类中。无性能损失但不够灵活
  • 动态AOP时代
    AOP各种概念实体都是普通的Java类,在系统运行开始后才织入,而不是预先编译到系统类中。

AOP 基础概念

  • Jointpoint
    织入操作系统的执行点,基本上,程序执行过程中的执行点都可以作为Joinpoint。

  • Pointcut
    Pointcut概念代表的是Joint的表述方式,使用自然语言声明一个Pointcut,该Pointcut指定了系统中符合条件的一组Joinpoint。

  • Advice
    单一横切关注点逻辑的载体。类比:
    Aspect --> Class
    Advice --> Method

  • Aspect
    对系统中的横切关注点逻辑进行模块化封装的AOP概念实现,通常 包含多个Pointcut和相关Advice定义

  • 概念图

当你去餐馆的时候,你会看菜单,看到有几个选项可供选择。您可以点菜单上的一个或多个菜。但在你真正点菜之前,它们只是“用餐的机会”。一旦你下了订单,服务员把它送到你的桌子上,这就是一顿饭。

连接点(Joint-points)是菜单上的选项,而切入点(point-cuts)是您选择的项目。

连接点是代码中应用方面的机会……只是一个机会。一旦您抓住这个机会并选择一个或多个连接点并将一个方面应用于它们,您就得到了一个切入点

posted @ 2019-12-20 11:42  james_cai  阅读(139)  评论(0)    收藏  举报