后端常见问题--AOP原理

 问:Spring AOP底层实现原理

答:AOP底层是采用动态代理机制实现的:接口+实现类

要代理的某个接口的实现类,Spring AOP会使用JDK Proxy,去创建代理对象。

不是接口的实现类无法使用JDK Proxy进行代理了,Spring AOP会使用 Cglib 生成一个被代理对象的子类来作为代理。

即通过代理的方式创建一个和impl实现类平级的一个对象,对象不是一个真正意义上的对象,只是一个代理对象,但它可以实现和impl相同的功能这个就是AOP的横向机制原理,这样就不需要修改源代码。

 问:Aop概念

在程序中具有公共特性的某些类/某些方法上进行拦截, 在方法执行的前面/后面/执行结果返回后增加执行一些方法。

银行取款流程和查询余额流程如下所示:

这个两者有一个相同的验证流程如果有更多的操作,验证用户的功能是不是需要写很多次;

AOP可以在写代码时不要把验证用户步骤写进去,完全不考虑验证用户,你写完之后,在另一个地方,写好验证用户的代码,然后告诉Spring你要把这段代码加到哪几个地方,Spring就会帮你加过去,而不要你自己Copy过去AOP的本质是在一系列纵向的控制流程中,把那些相同的子流程提取成一个横向的面

​​​​​​​ 问:Aop关键名词

目标对象(Target):

目标对象是指要被增强的对象,即包含主业务逻辑的对象。

连接点(JoinPoint):

程序运行的某一个点,比如某个执行方法,在springAop中join point总是表示一个方法的执行。连接点表示方法的调用过程,内部包含了方法调用过程中的所有信息,比如被调用的方法、目标、代理对象、执行拦截器链等信息。

代理对象(Proxy):

 Aop 会通过代理的方式,对目标对象生成一个代理对象,代理对象中会加入需要增强的功能,通过代理对象来间接的方式到目标对象上,起到增强目标对象的效果。

通知(Advice):

需要在目标对象中增强的功能,如:业务方法前验证用户的功能、方法执行之后打印方法的执行日志。通知中有2个重要的信息:方法的什么地方,执行什么操作,这2个信息通过通知来指定。方法的什么地方?之前、之后、包裹目标方法、方法抛出异常后等

拦截器链

 一个目标方法中可以添加很多Advice,这些Advice最终都会被转换为MethodInterceptor(连接点接口)类型的方法拦截器,最终会有多个MethodInterceptor ,这些MethodInterceptor 会组成一个方法调用链。

Aop内部会给目标对象创建一个代理,代理对象中会放入这些MethodInterceptor 会组成一个方法调用链,当调用代理对象的方法的时候,会按顺序执行这些方法调用链,一个个执行,最后会通过反射再去调用目标方法,进而对目标方法进行增强。

切入点(Pointcut): 

用了指定需要将通知使用到那些地方,比如需要用在哪些类的那些方法上。

切面(Aspect):  

通知(advice)和切入点(Pointcut)的组合,切面定义在那些地方(Pointcut)执行什么操作(Advice);

顾问(Advisor):

 Pointcut和Advice的组合,Advice是要增强的逻辑,而增强的逻辑要在什么地方执行就是通过Pointcut来指定,所以advice必须与Pointcut组合在一起。

​​​​​​​ 问:有哪些类型的通知(Advice)

Before - 这些类型的 Advice 在 joinpoint 方法之前执行,并使用@Before 注解标记进行 配 置 。

After Returning - 这 些 类 型 的 Advice 在 连 接 点 方 法 正 常 执 行 后 执 行 , 并 使 用 @AfterReturning 注 解 标 记 进 行 配 置 。

After Throwing - 这 些 类 型 的 Advice 仅 在 joinpoint 方 法 通 过 抛 出 异 常 退 出 并 使 用 @AfterThrowing 注 解 标 记 配 置 时 执 行 。

After (finally) - 这些类型的 Advice 在连接点方法之后执行,无论方法退出是正常还是异常返回, 并使用 @After 注解标记进行配置。

Around - 这些类型的 Advice 在连接点之前和之后执行,并使用@Around 注解标记进行配置。

注:相关问题只是了解,后续深入会继续补充。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值