AOP
什么是AOP
面向切面编程AOP是一种编程范式,在不惊动原始设计的基础上进行功能增强。
在Spring称为无入侵式编程。
- 连接点:程序的执行点
- 切入点PointCut:匹配连接点的式字
- 通知方法:要追加的功能
- 通知类:保存通知方法的类
- 切面:切入点与通知的关系
AOP工作流程
- Spring容器启动
- 读取所有的切入点
@Pointcut("execution(void com.example.BookDao.save())")
private void pointCutSave() {}
@Pointcut("execution(void com.example.BookDao.update())")
private void pointCutUpdate() {}
- 初始化Bean,判定Bean的方法能否匹配切入点
- 匹配失败,创建对象
- 匹配成功,创建原始对象的代理对象
class jdk.proxy2.$Proxy19
- 获取Bean执行方法
切入点表达式
动作关键字(访问修饰符 返回值 包名.类/接口.方法名(参数) 异常),最好反着看
- "*" 可以福利出现,也可以作为前缀和后缀,作为参数表示至少有要一个参数
- ".." 简化包名和参数书写,尽量不使用
- "+" 描述子类
AOP通知类型
- @Before 前
- @After 后
- @Around 环绕
@Around("pointCutSave()") public Object Around(ProceedingJoinPoint joinPoint) throws Throwable { System.out.println("before"); Object temp = joinPoint.proceed(); System.out.println("after"); return temp; }Object[] args = joinPoint.getArgs();获得需要的参数,并可以进行处理Object result = joinPoint.proceed();执行方法
- AfterReturning
- AfterThrowing

浙公网安备 33010602011771号