Spring AOP

AOP: Aspect Object Programming 面向切面编程。

AOP的主要功能是让关注点代码和业务代码分离。

关注点即重复的代码,切面即关注点形成的类。

面向切面编程即面向重复的代码编程,在运行的时候业务方法动态植入“切面类代码”。

AOP的相关jar包

1、spring-aop.jar

2、aspectj.jar(aop的依赖包)

3、aspectjweaver.jar

4、aopalliance.jar

XML配置及切入点表达式

<!-- 切面类 -->
  <bean id="aop" class="com.istonestone.aop"></bean>
    
    <!-- AOP配置 -->
    <aop:config>
        <!-- 定义一个切入点表达式,拦截哪些方法 “ * com.isoftstone.aop.*.*(..)”格式说明
        “修饰符 包名.类名.方法名(方法参数)”即  拦截com.isoftstone.aop包下任何类带任何参数返回修饰符的方法
        -->
        <aop:pointcut id="pt" expression="execution(* com.isoftstone.Dao.*.*(..))"/>
        
        <!-- 拦截所有public方法-->
        <aop:pointcut id="pt1" expression="execution(public * *(..))"/>
        
        <!-- 拦截指定方法 ,例如拦截所有save方法-->
        <aop:pointcut id="pt2" expression="execution(* save*(..))"/>
        
        <!-- 拦截指定类的指定方法 -->
        <aop:pointcut id="pt3" expression="execution(* com.isoftstone.Dao.save(..))"/>        
        
        <!-- 拦截包及其子包下的所类的所有方法 -->
        <aop:pointcut id="pt4" expression="execution(* com..*(..))"/>
        
        <!--拦截多个表达式  -->
        <aop:pointcut id="pt5" expression="*execution(* com.isoftstone.Dao.save(..)) or * execution(* com.isoftstone.Dao.update(..))"/>
        
        <!-- 取非值 -->
        <aop:pointcut id="pt6" expression="!execution(* com.isoftstone.Dao.save(..))"/>        
        
        <aop:aspect ref="aop">
            <!-- 环绕通知 -->
            <aop:around method="around" pointcut-ref="pt"/>
            
            <!-- 前置通知,在目标方法调用前执行 -->
            <aop:before method="begin" pointcut-ref="pt"/>
            
            <!-- 后置通知 -->
            <aop:afater method="after" pointcut-ref="pt"/>
            
            <!-- 返回后通知 -->
            <aop:afater-returning method="afterRetruning" pointcut-ref="pt"/>
            
            <!-- 异常通知 -->
            <aop:afater-throwing method="afterThrowing" pointcut-ref="pt"/>
            
        </aop:aspect>
    </aop:config>
原文地址:https://www.cnblogs.com/StanLong/p/6986945.html