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方法