AOP又称面向切面编程。可以达到不影响系统原有业务的情况下,对其进行横向扩展。所谓横向就是controller - service - dao中的某一层,AOP增强的方法可以作用于某一层的所有方法。
核心概念
切面: 拦截类,会定义具体的切点以及通知
切点: 具体拦截的业务点
通知:
- 前置通知:@before 在目标业务方法执行前执行
- 后置通知:@after 在目标业务方法执行后执行
- 返回通知:@AfterReturning 在目标业务方法返回结果之后执行
- 异常通知:@AfterThrowing 在目标业务方法抛出异常之后
- 环绕通知:@Around 可以代替以上四种通知,并控制目标业务是否执行以及何时执行。
总结
- AOP是基于动态代理的,有jdk和cglib两种方式
- 如果被代理的对象没有接口,就用cglib;如果对象是单例的,也推荐cglib,速度快
- AOP是针对方法的,只能对方法进行增强。