AOP面向切面

  • Post author:
  • Post category:其他




什么是AOP

AOP是Aspect Oriented Programming的缩写

Aspect表示切面,给业务方法增加的功能,叫做切面。切面一般都是非业务功能,而且切面功能一般都是可以复用的。例如日志功能,事务功能,权限检查,参数检查,统计信息等等

Oriented 面向

Programming 编程



AOP中的一些术语

Aspect:切面,指给业务方法增加的功能

JoinPoint:连接点,连接切面的业务方法,在这个业务方法执行时会同时执行切面的功能

Poingcut:切入点,是一个或多个连接点的集合,表示这些方法执行时都能增加切面的功能。。表示

切面

执行的位置(

这里的位置不是指具体业务逻辑里执行切面的位置,是指哪些方法需要执行切面的位置

)

target:目标对象,给哪个对象增加切面的功能,这个对象就是目标对象

Advice:通知(增强),表示切面的执行时间。在目标方法之前执行切面,还是目标方法之后执行切面

AOP中比较重要的三要素:Aspect,Pointcut,Advice。这三者的联系是:在Advice的时刻,在Pointcut的位置去执行Aspect

AOP是一个动态的思想。在程序运行期间创建代理,使用代理执行方法时,增加切面的功能。这个代理对象是存在于内存中的



AspectJ框架

AspectJ框架可以使用注解和xml配置文件两种方式 实现 AOP

Aspectj表示切面执行时间,用的通知(Advice)。 这个通知可以使用注解表示。

常用5个注解, 表示切面的5个执行时间, 这些注解叫做通知注解。


@Before : 前置通知

@AfterRetunring: 后置通知

@Around: 环绕通知

@AfterThrowing:异常通知(发生异常且没有被catch时会触发该通知)

@After:最终通知(无论有没有异常都会执行该切面,并且是最后执行的,类似try-catch-finally中的finally)

Pointcut 位置

Pointcut 用来表示切面执行的位置, 使用Aspectj中切入点表达式。

切入点表达式的官方语法是


execution(modifiers-pattern? ret-type-pattern declaring-type-pattern?namepattern(param-pattern)

throws-pattern?)


解释下:

modifiers-pattern] 访问权限类型

ret-type-pattern 返回值类型

declaring-type-pattern 包名类名

name-pattern(param-pattern) 方法名(参数类型和参数个数)

throws-pattern 抛出异常类型


?表示可选的部分


可能看着有点复杂,举个例子 我建了一个项目 结构如下


在这里插入图片描述

在切面类中我想让doSome方法执行的时候额外在控制台打印执行时间,那么就可以写一个方法来实现

在这里插入图片描述

这个表达式就完整的表示在doSome方法执行时会执行切面里的逻辑,我在里面就是很简单的打印了一个当前时间。表示在doSome方法什么时候执行的



(其实我写的execution表达式还可以再精简到execution(void doSome(String,Integer)) 因为上面介绍过带?的是可选的)



执行doSome方法控制台打印结果

在这里插入图片描述

这就是切面的简单使用。



execution表达式还可以使用通配符进一步简化表达式的编写

详细了解可以去网上搜下

在这里插入图片描述



版权声明:本文为weixin_44001317原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。