【JavaEE】Spring AOP (面向切面)详解

1. 什么是 Spring AOP?

Spring AOP 与 AOP 就如果 IOC(思想:控制反转) 和 DI (具体实现:依赖注入) ,其中AOP是思想,Spring AOP是具体实现。

AOP 是⼀种思想, Spring AOP 是⼀个框架,提供了⼀种对 AOP 思想的实现。

1.1 AOP

AOP(Aspect Oriented Programming):⾯向切⾯编程,它是⼀种思想,它是对某⼀类事情的集中处理

AOP:面向切面编程,与OOP(面向对象编程)类似但又不互斥,可以说AOP是OOP的一种拓展与补充。

⽐如⽤户登录权限的效验,没用 AOP 之前,我们所有需要判断⽤户登录的⻚⾯(中的⽅法),都要各⾃实现或调⽤⽤户验证的⽅法,然⽽有了 AOP 之后,我们只需要在某⼀处配置⼀下,所有需要判断⽤户登录⻚⾯(中的⽅法)就全部可以实现用户登录验证了,不再需要每个⽅法中都写相同的⽤户登录验证了。

1.2 使用 AOP 的场景

如在判断用户是否登录的场景中,一个网站项目中,除了登录和注册这两个页面不用判断用户登录状态,此外的诸多页面都需要使用同样的方式来判断用户是否登录,这些判断方法都是相同的,这么多的方法就会增加代码的维护和修改的成本;

对于这种功能的统一,且使用的地方较多的功能,就可以考虑 AOP 来进行统一处理了。

除了统⼀的⽤户登录判断之外,AOP 还可以实现:

  • 统⼀⽇志记录
  • 统⼀⽅法执⾏时间统计
  • 统⼀的返回格式设置
  • 统⼀的异常处理
  • 事务的开启和提交等

也就是说使⽤ AOP 可以扩充多个对象的某个能⼒,所以 AOP 可以说是 OOP(Object OrientedProgramming,⾯向对象编程)的补充和完善。

2. AOP 组成

AOP 组成的官方概念很难理解,这里给出官网解释(不加粗)和博主个人理解解释(加粗)

2.1 切面(Aspect)

切⾯(Aspect)由切点(Pointcut)和通知(Advice)组成,它既包含了横切逻辑的定义,也包括了连接点的定义。

切面:定义 AOP 是针对哪个统一的功能的,这个功能就叫做一个切面,比如用户登录功能或方法的统计日志,他们就各是一个切面。切面是由 切点 +通知 组成的。切⾯是包含了:通知、切点和切⾯的类,相当于 AOP 实现的某个功能的集合。

2.2 连接点(Join Point)

应⽤执⾏过程中能够插⼊切⾯的⼀个点,这个点可以是⽅法调⽤时,抛出异常时,甚⾄修改字段时。切⾯代码可以利⽤这些点插⼊到应⽤的正常流程之中,并添加新的⾏为。

连接点:所有可能触发 AOP (拦截方法的点) 就称为连接点;连接点相当于需要被增强的某个 AOP 功能的所有方法。

2.3 切点(Pointcut)

Pointcut 是匹配 Join Point 的谓词。

Pointcut 的作⽤就是提供⼀组规则(使⽤ AspectJ pointcut expression language 来描述)来匹配 Join Point,给满⾜规则的 Join Point 添加 Advice。

切点:用来定义 AOP 拦截的规则的 ;切点相当于保存了众多连接点的⼀个集合(如果把切点看成⼀个表,而连接点就是表中⼀条⼀条的数据)。

2.4 通知(Advice)

切⾯也是有⽬标的 ——它必须完成的⼯作。在 AOP 术语中,切⾯的⼯作被称之为通知。

通知:定义了切⾯是什么,何时使⽤,其描述了切⾯要完成的⼯作,还解决何时执⾏这个⼯作的问题。

通知:规定 AOP 执行的时机和执行的方法;

Spring 切⾯类中,可以在⽅法上使⽤以下注解,会设置⽅法为通知⽅法,在满⾜条件后会通知本⽅法进⾏调⽤:

  • 前置通知使用 @Before:通知⽅法会在⽬标⽅法调⽤之前执⾏。

  • 后置通知使用 @After:通知⽅法会在⽬标⽅法返回或者抛

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值