zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    .Net使用分布式缓存 C# 使用Redis
    微信申请退款API~~开发
    微信支付和支付宝支付分账接口文档
    Android xUtils3.0使用手册(一)- 基础功能使用
    支付宝支付开发——当面付条码支付和扫码支付
    vue开源项目汇总
    Azure和插件发布
    SqlServer数据库优化笔记
    企业微信通过PostMan获取accesstoken与管理员信息方法
    VisualStudio插件自动加载
  • 原文地址:https://www.cnblogs.com/StanLong/p/6986945.html
Copyright © 2011-2022 走看看