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>
  • 相关阅读:
    element ui表单校验prop的链式写法----源码分析
    函数的链式调用实现Man().sleep().eat()
    chrome浏览器表单自动填充默认样式-autofill
    苹果企业证书签名和超级签名
    iOS企业重签名管理软件之风车签名管理
    iOS/IPA重签名工具
    关于keytool和jarsigner工具签名的使用小结
    《Android逆向反编译代码注入》
    IPA的动态库注入+企业重签名过程
    linux部署MantisBT(二)部署php
  • 原文地址:https://www.cnblogs.com/DDiamondd/p/10673649.html
Copyright © 2011-2022 走看看