• spring学习 十二 AspectJ-based的通知入门 带参数的通知


    第一步:编写通知类

    package com.airplan.pojo;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    
    public class Advice {
        
            public void mybefore(String name1,int age1){
                System.out.println("前置"+name1 );
            }
            
            public void mybefore1(String name1){
                System.out.println("前置:"+name1);
            }
            
            public void myaftering(){
                System.out.println("后置 2");
            }
            
            public void myafter(){
                System.out.println("后置 1");
            }
            
            public void mythrow(){
                System.out.println("异常");
            }
            
            public Object myarround(ProceedingJoinPoint p) throws Throwable{
            
                System.out.println("执行环绕");
                System.out.println("环绕-前置");
                Object result = p.proceed();
                System.out.println("环绕后置");
                return result;
            }
    }

    第二步配置

    2 配置 spring 配置文件

      2.1 <aop:after/> 后置通知,是否出现异常都执行

      2.2 <aop:after-returing/> 后置通知,只有当切点正确执行时执行

      2.3 <aop:after/> 和 <aop:after-returing/> 和<aop:after-throwing/>执行顺序和配置顺序有关

      2.4 execution() 括号不能扩上 args
      2.5 中间使用 and 不能使用&& 由 spring 把 and 解析成&&
      2.6 args(名称) 名称自定义的.顺序和 demo1(参数,参数)对应
      2.7 <aop:before/> arg-names=” 名 称 ” 名 称 来 源 于expression=”” 中 args(),名称必须一样

        2.7.1 args() 有几个参数,arg-names 里面必须有几个参数
        2.7.2 arg-names=”” 里面名称必须和通知方法参数名对应

    <aop:config>
            <aop:aspect ref="myadvice">
                <!-- 
                    args(name1,age1):args中的参数必须与<aop:before />标签中arg-names的属性值一致
                 -->
                <aop:pointcut expression="execution(* com.bjsxt.test.Demo.demo1(String,int)) and args(name1,age1)" id="mypoint"/>
                
              
                
                <aop:before method="mybefore" pointcut-ref="mypoint" arg-names="name1,age1"/>
                
                
                
            </aop:aspect>
        </aop:config>

    上面标蓝的部分一定要一致,并且要与通知方法的参数对应,连名称也要一样,虽然切点的参数名称不要求和args中的名称对应,但是数量要对应

  • 相关阅读:
    C语言volatile解析
    使用中断开关实现全局变量互斥访问
    CentOS7下gogs安装总结
    iOS Xcode: linker command failed with exit code 1 (use -v to see invocation) 处理方法
    C# 10进制与62进制互转 数据大无压力 10进制与72,96进制任意转换
    Web网站的性能测试工具
    NetCore跨平台桌面框架Avalonia的OSX程序打包
    C# 类中静态变量静态构造函数执行顺序
    mac osx下虚拟主机配置
    React+ES6+Webpack深入浅出
  • 原文地址:https://www.cnblogs.com/cplinux/p/9741750.html
Copyright © 2020-2023  润新知