Spring AOP编程
将重复冗余的代码抽取出来,通过动态代理的方式在程序运行时对程序进行增强和扩展。是面向函数编程的衍生,能够解耦合。
1. 相关概念
- 连接点(Joinpoint)需要被扩展和增强的方法
- 切入点(pointcut)通过切入点表达式,描述一组具有共同性的连接点,比如说对包含“remove”的方法执行后记录日志。
- 通知(Advance)对连接点进行的扩展和增强的行为,例如进行remove后会记录日志,权限验证行为、事务行为。
- 织入(Weaving)将通知连接到连接点,创建代理对象的过程
- 目标对象(Target Object)连接点被织入通知后,生成的代理类创建的代理对象,Spring AOP通过运行时代理实现。
- 切面(Aspect)一个支持对横跨多个模块功能,实现通用同意扩展的行为,例如:事务处理切面、日志记录切面等。切面通常包含切入点表达式和通知。Spring中用
@Aspect
申明这是一个切面类。
当一个对象不想引用或不能直接引用另一个对象时就可以通过动态代理来实现。
2. Spring中的Advice类型
@Before
前置通知,在切入点方法执行前通知@AfterReturning
@AfterThrowing
@After
后置最终(finally)通知,@Around
环绕通知
3. 各类通知的执行顺序
Around -> Before -> proceed(目标方法执行) -> AfterReturning/AfterThrowing -> After -> Around
1 | Around beginning... |