AOP面向切面编程

 

目录

  面向切面编程:

Spring切面可以应用5种类型的通知:

AOP作用:

AOP的原理:


面向切面编程:

在不改变源代码的基础上对源代码进行增强
joint point :连接点: 方法的调用
Pointct :符合某种规则的连接点 切入点 ;连接点包含切入点,切入点一定是连接点,连接点不一定是切入点
Advice  通知 增强的方法
Aspect 切面  简单理解狭义上的切面:一个类包含增强的方法和指定的规则
                                  广义上:=连接点+切入点+通知
Target Object  目标对象 :被增强的对象
weaving 织入: 通过动态代理增强指定方法

AOP面向切面编程 (Aspect Oriented Program)

Spring切面可以应用5种类型的通知:

前置通知(Before):在目标方法被调用之前调用通知功能。
后置通知(After):在目标方法完成之后调用通知,此时不会关心方法的输出是什么。
返回通知(After-returning):在目标方法成功执行之后调用通知。
异常通知(After-throwing)):在目标方法抛出异常后调用通知。
环绕通知(Around) :通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为

通知器的在不同条件下的执行情况

测试后置通知和最终通知,在有异常和没异常时执行结果是否相同

  1. 如果有异常,后置通知不会被执行
  2. 不论是否出现异常,最终通知都会被执行
  3. 最终通知不能获取返回值

如果所有通知都执行,其执行顺序是什么?

情况1:有异常时

  1. 环绕通知
  2. 前置通知
  3. 调用目标方法
  4. 异常通知
  5. 最终通知

情况2:没有异常时

1环绕通知

2前置通知

3调用目标方法

4后置通知

5最终通知

6环绕通知

AOP作用:

日志记录,权限检查,性能监控,事务控制,异常处理……

 

AOP的原理:

Spring会创建目标对象的代理,根据切入点规则匹配对应的连接点,把连接点变为切入点,不会直接执行目标方法,会被切面类中的通知进行增强。

AOP如何生成代理对象:如果目标对象实现了接口,那么使用java api Proxy类,如果目标对象没有实现接口,底层使用CGLIB

如果想强制使用CGLIB需要添加

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值