对于切面AOP的学习| 青训营笔记

82 阅读1分钟

这是我参与「第四届青训营 」笔记创作活动的第4天

树若有情时,那得青青如许

@TOC


前言

面向切面编程(Aspect Orient Programming)


一、切面是什么?

公共的,通用的,重复的功能称为切面。 面向切面编程就是讲切面提取出来,单独开发,在需要调用的方法种通过动态代理的方式经行织入

二、手写AOP框架

业务:图书购买业务 切面:事务(公共部分) 先事务开启,然后图书购买业务实现,然后再事务提交(出错时事务回滚)

2.1version1

业务和切面紧耦合在一起,没有拆分

2.2version2

使用子类代理的方式拆分业务和切面

2.3version3

使用静态代理拆分业务和切面,业务和业务接口已拆分,此时切面紧耦合在业务中 在这里插入图片描述

2.4version4

使用静态代理拆分业务和业务接口,切面和切面接口

2.5version5

使用动态代理完成第四个版本的优化

三、Spring支持的AOP的实现

Spring支持AOP的编程,常用的有以下几种:

  • Before通知:在目标方法被调用前调用,涉及接口org.springframework.aop.MethodBeforeAdvice
  • After通知:在目标方法被调用后调用,涉及接口org.springframework.aop.AfterReturningAdvice
  • Throws通知:在目标方法抛出一场时调用,涉及接口org.springframework.aop.ThrowAdvice
  • Around通知:拦截对目标对象方法调用,涉及接口org.aopalliance.intercept.MethodInterceptor

总结

在这里插入图片描述 可空实现(接口): 在这里插入图片描述

在这里插入图片描述

目标对象,代理对象... java设计模式 静态、动态代理

个中细节看spring_006_aop代码