AOP中的专业术语介绍

一、AOP简介

AOP(Aspect-Oriented Programming, 面向切面编程): 是一种新的方法论, 是对传统 OOP(Object-Oriented Programming, 面向对象编程) 的补充。

AOP 的主要编程对象是切面(aspect), 而切面是把横切关注点模块化!

在应用 AOP 编程时, 需要定义公共功能, 但可以明确的定义这个功能在哪里应用, 并且不必修改需要使用公共功能的类。 这样以来横切关注点就被模块化到特殊的对象(切面)里.

二、AOP 的好处

每个事物逻辑位于一个位置, 代码不分散, 便于维护和升级

业务模块更简洁, 只包含核心业务代码。

三、AOP 术语

1. 连接点(Joinpoint)

连接点描述的是程序执行的某个特定位置。如一个类的初始化前、初始化后,或者类的某个方法调用前、调用后、方法抛出异常后等等。一个类或一段程序代码拥有一些具有边界性质的特定点,这些特定点就称为连接点。连接点用来定义在目标程序的哪里通过AOP加入新的逻辑。

Spring仅支持方法的连接点,即仅能在方法调用前、方法调用后、方法抛出异常时以及方法调用前后这些程序执行点织入增强。

连接点由两个信息确定:第一是用方法表示的程序执行点;第二是用相对点表示的方位

执行点:即程序执行流程中的某个点。如执行某个语句或者语句块、执行某个方法、装载某个类、抛出某个异常……

例如 :UserService#add() 方法执行之前,这个连接点。执行点为 UserService#add()方法本身; 方位为该方法执行前的位置。

2. 切入点(Pointcut)

切入点是一个连接点的过滤条件,AOP 通过切点定位到特定的连接点。每个类都拥有多个连接点:例如 UserService类中的所有方法实际上都是连接点,即连接点是程序类中客观存在的事物。类比:连接点相当于数据库中的记录,切点相当于查询条件。切点和连接点不是一对一的关系,一个切点匹配多个连接点,切点通过 org.springframework.aop.Pointcut 接口进行描述,它使用类和方法作为连接点的查询条件。
xml配置方式:

    <aop:config>
        <aop:pointcut id="myPointcut" expression="execution(* com.kaka.spring.aop.aspect.service.UserService.*(..))"/>
    </aop:config>
3. 通知(Advice)

切面在某个具体的连接点采取的行为或行动,称为通知切面的核心逻辑代码都写在通知中,有人也称之为增强或者横切关注点。通知是切面功能的具体实现,通常是业务代码以外的需求,如日志、验证等,这些被模块化的特殊对象。
常用的通知接口有

  • 前置通知:org.springframework.aop.MethodBeforeAdvice
  • 后置通知:org.springframework.aop.AfterReturningAdvice
  • 异常通知:org.springframework.aop.ThrowsAdvice
    该接口没有要实现的方法,需要自定义一个afterThrowing()方法。
  • 环绕通知:org.aopalliance.intercept.MethodInterceptor

xml配置方式

    <bean id="myMethodBeforeAdvice" class="com.kaka.spring.aop.advice.MyMethodBeforeAdvice"/>
    <aop:config>
        <!--①. 切入点(可以有多个) -->
        <aop:pointcut id="myPointcut" expression="execution(* com.kaka.spring.aop.aspect.service.UserService.*(..))"/>
        <!-- ②.各种通知(可以有多个,并且可以加在不同的切入点上) -->
        <aop:advisor advice-ref="myMethodBeforeAdvice" pointcut-ref="myPointcut" />
    </aop:config>

MyMethodBeforeAdvice这个类,实现了MethodBeforeAdvice前置通知接口。

4. 通知器(Advisor)

通知器由一个切入点(pointcut)和一个通知(Advice)组成。通知就是增强的那部分功能代码,如记录日志代码、控制权限代码。

<aop:advisor advice-ref="myMethodBeforeAdvice" pointcut-ref="myPointcut" />
5. 切面(Aspect)

与通知器(advisor)类似都是通知+切入点。区别在于,切面中的类无需实现通知接口,但需要在配置文件中指定类中的方法名;而通知器仅需指定类名即可,因为通知器中的类都实现了通知接口,很明确的知道通知方法是哪个。
xml配置方式

    <bean id="myXmlAspect" class="com.kaka.spring.aop.aspect.MyXmlAspect"/>
    <aop:config>
        <!--①. 切入点(可以有多个) -->
        <aop:pointcut id="myPointcut" expression="execution(* com.kaka.spring.aop.aspect.service.UserService.*(..))"/>
        <!--②. 切面(可以有多个) -->
        <aop:aspect ref="myXmlAspect">
            <!--切点与切面中的方法关联 -->
            <aop:around method="aroundMethod" pointcut-ref="myPointcut"/>
        </aop:aspect>
    </aop:config>

MyXmlAspect类无需实现任何通知接口,只需定义一个aroundMethod方法即可,该方法名也可以自定义其他的。
可以理解为:切面就是自定定义的aop对象,通知就是配置中指定的该对象方法。

6. 目标(Target)

被通知的对象(方法)

7. 代理(Proxy)

向目标对象应用通知之后创建的对象

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:编程工作室 设计师:CSDN官方博客 返回首页

打赏作者

Bronze5

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值