一、基本概念
  • AOP(aspect oriented programming):面向切面编程
  • 面向切面编程:在原有纵向执行流程中,针对某一个或某一些方法添加通知,形成横切面的过程就叫面向切面编程。
spring aop 随笔 第1张 spring aop 随笔 第2张
  • 优点:高扩展性,可以释放原有功能部分逻辑,让职责更明确。
  • 常用概念:
    • 原有功能:切点,pointcut
    • 前置通知:在切点之前执行的功能,before advice
    • 后置通知:在切点之后执行的功能,after advice
    • 异常通知:如果切点执行过程中出现异常,会出发异常通知,throws advice
    • 切面:所有功能统称切面
    • 织入:把切面嵌入到原有功能的过程
  • spring提供2种AOP实现方式
    • Schema-based
      • 每个通知需要实现接口或类
      • 在<aop:advisor>中配置
    • AspectJ
      • 每个通知不需要实现接口或类
      • 在<aop:aspect>中配置
  二、Schema-based
  • applicationContext.xml:
       <bean id="demobefore" class="com.test.advice.Before"></bean>        <bean id="demoafter" class="com.test.advice.After"></bean>        <aop:config>               <aop:pointcut expression="execution(* com.test.aop.Demo.demo2())"  id="demopoint"/>               <aop:advisor advice-ref="demobefore" pointcut-ref="demopoint"/>               <aop:advisor advice-ref="demoafter" pointcut-ref="demopoint"/>        </aop:config>        <bean id="demo" class="com.test.aop.Demo"></bean>
  • 前置通知类:
package com.test.advice;   import java.lang.reflect.Method; import org.springframework.aop.MethodBeforeAdvice;   public class Before implements MethodBeforeAdvice{     @Override     public void before(Method method, Object[] args, Object target) throws Throwable {         System.out.println("before demo2...");     } }
  • 后置通知类:
package com.test.advice;   import java.lang.reflect.Method; import org.springframework.aop.AfterReturningAdvice;   public class After implements AfterReturningAdvice{     @Override     public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {         System.out.println("after demo2...");     } }  
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄