zoukankan      html  css  js  c++  java
  • 强大的【环绕通知】

    AOP (面向切面编程) :在程序运行时,动态的将代码块切入到某个类的某个方法的某个位置(前面、后面、发生异常时)上。

    前置通知:在某个方法之前执行   实现MethodBeforeAdvice接口

    后置通知:在某个方法之后执行   实现AfterReturningAdvice接口

    异常通知:在某个方法发生异常时执行    实现ThrowsAdvice接口

    环绕通知:可以在方法之前、之后、发生异常时执行!   实现MethodInterceptor接口

    最终通知:不论目标方法是否发生异常都会执行

    切点和切面:切点是:在目标方法之前这个点、目标方法之后这个点、在目标方法发生异常这个点

          切面是:在切点执行的代码块。

    环绕通知:

      可以获取目标方法的 完全控制权!(方法是否执行、控制参数、控制返回值)

      在使用环绕通知时,目标方法的一切信息,都可以通过invocation(invoke方法传进去的参数名称)参数获取到

    public class SurroundMethod implements MethodInterceptor{
    
        public Object invoke(MethodInvocation invocation) {
            Object result = null;
            try {
                System.out.println("环绕通知里面的【前置通知】。。。");
                result = invocation.proceed();  //这里相当于执行目标方法 如果不写目标方法就不会执行
                // result是目标方法的返回值
                System.out.println("环绕通知里面的【后置通知】...");
            } catch (Throwable e) {
                System.out.println("这里是执行环绕通知里面的【异常通知】。。。");
                e.printStackTrace();
            } finally{
                  System.out.println("这里是执行环绕通知里面的【最终通知】");
              }
            return result;
            //也可以返回其他  return “123”;  那么目标方法的返回值就是 "123"
        }
        
    }

    在applicationContext.xml文件中的配置  然后执行目标方法

    <bean></bean>  通知类要写进来
    
    <aop:config>
    <!-- 切点 -->
    <aop:pointcut expression="execution(【这里是目标方法的具体信息】public * com.service.AddStudent.addStudent())" id="addStudent1"/>
    <!-- 连线 切点和切面连接起来 -->
    <aop:advisor advice-ref="interceptMethod" pointcut-ref="addStudent1"/>
    </aop:config>
  • 相关阅读:
    mysql 时间戳 转 时间
    VSCode搭建VUE 开发环境
    虚拟通信
    JavaScript 获取客户端计算机硬件及系统信息
    Thinkphp关联模型BELONGS_TO
    docker部署rancher踩坑篇
    青龙面板 脚本 依赖库下载安装
    Linux 随记
    Tekton DAG代码
    手写Spring valar
  • 原文地址:https://www.cnblogs.com/DDiamondd/p/10673649.html
Copyright © 2011-2022 走看看