Skip to content
Spring系列随记(2) AOP

Aspect Oriented Programming,面向切面编程


提示

本节内容摘自廖雪峰

Spring AOP

本质就是代理,Spring的AOP实现就是基于JVM的动态代理

实现流程:

  • 定义执行方法,并在方法上通过拦截器与注解告诉Spring应该在何处调用
  • 标记@Component和@Aspect
  • 在@Configuration类上标注@EnableAspectJAutoProxy

AOP拦截器

  • @Before:这种拦截器先执行拦截代码,再执行目标代码。如果拦截器抛异常,那么目标代码就不执行了;
  • @After:这种拦截器先执行目标代码,再执行拦截器代码。无论目标代码是否抛异常,拦截器代码都会执行;
  • @AfterReturning:和@After不同的是,只有当目标代码正常返回时,才执行拦截器代码;
  • @AfterThrowing:和@After不同的是,只有当目标代码抛出了异常时,才执行拦截器代码;
  • @Around:能完全控制目标代码是否执行,并可以在执行前后、抛异常后执行任意拦截代码,可以说是包含了上面所有功能。

AOP注意事项

  • 访问被注入的Bean时,总是调用方法而非直接访问字段
  • 编写Bean时,如果可能会被代理,就不要编写public final方法