SpringBoot AOP完全讲解一:基础概念

转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/80669022
本文出自【赵彦军的博客】

Aop 切面编程

aop 全称 Aspect Oriented Programming ,面向切面,AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。其与设计模式完成的任务差不多,是提供另一种角度来思考程序的结构,来弥补面向对象编程的不足。

搭建Aop

本来 spring 就自带一套 aop 实现,我们直接使用此实现即可,本来使用aop还需要定义一些xml文件,但由于我们使用的是spring-boot框架,这一步就省略掉了。 也就是说,在spring-boot中,我们可以直接使用aop而不需要任何的 xml 配置,只需要添加相应的以来即可

compile('org.springframework.boot:spring-boot-starter-web',
        'org.springframework.boot:spring-boot-starter-aop' )

Aop 常用术语

  • 切面(Aspect):

一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。在Spring AOP中,切面可以使用基于模式或者基于@Aspect注解的方式来实现。

  • 连接点(Joinpoint):

在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中,一个连接点总是表示一个方法的执行。

  • 通知(Advice):

在切面的某个特定的连接点上执行的动作。其中包括了“around”、“before”和“after”等不同类型的通知(通知的类型将在后面部分进行讨论)。许多AOP框架(包括Spring)都是以拦截器做通知模型,并维护一个以连接点为中心的拦截器链。

  • 切入点(Pointcut):

匹配连接点的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。

  • 引入(Introduction):

用来给一个类型声明额外的方法或属性(也被称为连接类型声明(inter-type declaration))。Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。例如,你可以使用引入来使一个bean实现IsModified接口,以便简化缓存机制。

  • 目标对象(Target Object):

被一个或者多个切面所通知的对象。也被称做被通知(advised)对象。既然Spring AOP是通过运行时代理实现的,这个对象永远是一个被代理(proxied)对象。

  • AOP代理(AOP Proxy):

AOP框架创建的对象,用来实现切面契约(例如通知方法执行等等)。在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。

  • 织入(Weaving):

把切面连接到其它的应用程序类型或者对象上,并创建一个被通知的对象。这些可以在编译时(例如使用AspectJ编译器),类加载时和运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。

切入点表达式

切入点表达式的格式:

execution([可见性] 返回类型 [声明类型].方法名(参数) [异常])

其中【】中的为可选,其他的还支持通配符的使用:

  • *:匹配所有字符
  • ..:一般用于匹配多个包,多个参数
  • +:表示类及其子类

运算符有:&&、||、!

常用的表达式

  • 包名切面

com.app.controller 包中所有的类的所有方法切面

@Pointcut("execution(public * com.app.controller.*.*(..))")
  • 包名及子包切面

com.app.controller 及其子包中所有的类的所有方法切面

@Pointcut("execution(public * com.app.controller..*.*(..))")
  • 类名切面

只针对 StudentController 类切面

@Pointcut("execution(public * com.app.controller.StudentController.*(..))")

个人微信号:zhaoyanjun125 , 欢迎关注

猜你喜欢

转载自blog.csdn.net/zhaoyanjun6/article/details/80669022