zoukankan      html  css  js  c++  java
  • spring AOP之重用切点表达式

    在使用@Before(execution(value=""))使用切点时,如果是需要重复使用,可以进行统一的设置。

    比如说现在有这么一个前置通知和后置通知:

    package com.gong.spring.aop.impl;
    
    import java.util.Arrays;
    import java.util.List;
    
    import javax.management.RuntimeErrorException;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.After;
    import org.aspectj.lang.annotation.AfterReturning;
    import org.aspectj.lang.annotation.AfterThrowing;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.springframework.stereotype.Component;
    
    //把这个类声明为一个切面:需要把该类放入到IOC容器中,再声明为一个切面
    @Aspect
    @Component
    public class LoggingAspect {
        //声明该方法为一个前置通知,在目标方法之前执行
        @Before("execution(public int com.gong.spring.aop.impl.Calculator.*(int, int))")
        public void beforeMethod(JoinPoint joinPoint) {
            String methodName = joinPoint.getSignature().getName();
            List<Object> args = Arrays.asList(joinPoint.getArgs());
            System.out.println(methodName+" begin with "+args);
        }
        //后置通知:在目标方法执行后,无论是否发生异常,执行的通知
        //在后置通知中不能访问目标的执行结果
        @After("execution(public int com.gong.spring.aop.impl.Calculator.*(int, int))")
        public void afterMethod(JoinPoint joinPoint) {
            //获取名字
            String methodName = joinPoint.getSignature().getName();
            //获取参数
            List<Object> args = Arrays.asList(joinPoint.getArgs());
            System.out.println(methodName+" end with "+args);
        }
    }

    在@before里面的切点是一样的,我们可以将重复的用切点表达式表示。

    在LoggingAspect 类中新建:

        @Pointcut("execution(public int com.gong.spring.aop.impl.Calculator.*(int, int))")
        public void declarJoinPointExpression() {}

    然后在使用Before等注解时,就可以简化了:

    @Before("declarJoinPointExpression()")
    @After("declarJoinPointExpression()")
  • 相关阅读:
    java项目路径获取
    String.getBytes()和new String()(string与byte[]的转换)
    Android生成一维码
    Android PullToRefresh (GridView 下拉刷新上拉加载)
    Android PullToRefresh (ListView GridView 下拉刷新) 使用详解
    Android 二维码扫描框 加四个角及中间横线自动下滑
    android 百度地图定位开发2
    android 百度地图定位开发1
    广播发送者&广播接收者介绍
    电脑配置 eclipse 环境变量
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12166364.html
Copyright © 2011-2022 走看看