Spring学习之AOP(上)

156 阅读2分钟

「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战

前言:更具昨天的总结,我感觉IOC和AOP在Spring技术中占有重要的地位,今天我就将单独讲解一下AOP。

基本概念:AOP,也可以称之为面向切面编程,是一个编程范式,他是从另一个角度来考虑程序结构从而完善面向对象编程(OOP)。

含有技术点:

  1. 连接点(Jointpoint):表示在程序中插入横切关注点的扩展点,连接点可能是类初始化、方法执行、方法调用、字段调用或处理异常等等。可看做AOP需要确立自己的立场,我需要在哪些点实现。
  2. 切入点(Pointcut):选择一组相关连接点的模式,即可以认为连接点的集合,Spring支持perl5正则3)表达式和AspectJ切入点模式,Spring默认使用AspectJ(常用的一类字节码处理框架)语法。
  3. 通知(Advice):通知包括前置通知(beforeadvice)、后置通知(afteradvice)、后置异常通知(AfterThrowing)、后置最终通知(After)、环绕通知(aroundadvice),异常拦截通知(afterException)。
  4. 切面(Aspect):横切主要是关注点的模块化,可以认为是通知、引入和切入点的组合。
  5. 引入(inter-typedeclaration):它为已经有的类添加额外新的方法,Spring允许引入新的接口(必须对应一个实现)到所有被代理对象(目标对象)。
  6. 目标对象(TargetObject):需要被织入横切关注点的对象,即该对象是切入点选择的对象,需要被通知的对象,从而也可称为“被通知对象”;由于SpringAOP通过代理模式实现,从而这个对象永远是被代理对象,在AOP中表示为“对谁干”;
  7. AOP代理(AOPProxy):AOP框架使用代理模式创建的对象,从而实现在连接点处插入通知(即应用切面),就是通过代理来对目标对象应用切面。在Spring中,AOP代理可以用JDK动态代理或CGLIB代理实现,而通过拦截器模型应用切面。
  8. 织入(Weaving):它将切面应用到目标对象从而创建出AOP代理对象的过程,织入可以在编译期、类装载期、运行期进行。

代码实例

MAVEN需要引入AOP相关:

<dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>aspectjrt</artifactId>
   <version>1.9.7</version>
</dependency>
   <!--cglib包是用来动态代理用的,基于类的代理-->
   <dependency>
      <groupId>cglib</groupId>
      <artifactId>cglib</artifactId>
      <version>3.2.9</version>
   </dependency>
<!--在 Spring2.0 以上版本中,可以使用基于 AspectJ 注解或基于 XML 配置的 AOP-->
<dependency>
   <groupId>org.aspectj</groupId>
   <artifactId>aspectjweaver</artifactId>
   <version>1.9.7</version>
</dependency>

在SpringBoot中MAVEN如下:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

小结:今天文章明天补上附加代码实现,今儿是大年初一,在这我祝大家,心想事成,身体健康,万事如意。