SpringCloud快捷创建注解切面

Posted liveinpresent

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringCloud快捷创建注解切面相关的知识,希望对你有一定的参考价值。

首先需要明白,实现AOP的切面主要有以下几个要素:

 

使用@Aspect注解将一个java类定义为切面类

使用@Pointcut定义一个切入点,可以是一个规则表达式,比如下例中某个package下的所有函数,也可以是一个注解等。

根据需要在切入点不同位置的切入内容

使用@Before在切入点开始处切入内容

使用@After在切入点结尾处切入内容

使用@AfterReturning在切入点return内容之后切入内容(可以用来对处理返回值做一些加工处理)

使用@Around在切入点前后切入内容,并自己控制何时执行切入点自身的内容

使用@AfterThrowing用来处理当切入内容部分抛出异常之后的处理逻辑

 

@Aspect

@Component

@Order(1)//联想为包菜同心圆结构,order等级越小,先进入,第二次后执行

public class WebLogAspect

    private Logger logger =  LoggerFactory.getLogger(this.getClass());

       /**

     * 定义一个切入点.

     * 解释下:

     *

     * ~ 第一个 * 代表任意修饰符及任意返回值.

     * ~ 第二个 * 任意包名

     * ~ 第三个 * 代表任意方法.

     * ~ 第四个 * 定义在web包或者子包

     * ~ 第五个 * 任意方法

     * ~ .. 匹配任意数量的参数.

     */

     @Pointcut("execution(public * com.kfit.*.web..*.*(..))")

     publicvoid webLog()

     

     @Before("webLog()")

     publicvoid doBefore(JoinPoint joinPoint)

        

       // 接收到请求,记录请求内容

        logger.info("WebLogAspect.doBefore()");

        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();

         HttpServletRequest request = attributes.getRequest();

               

      // 记录下请求内容

        logger.info("URL : " + request.getRequestURL().toString());

        logger.info("HTTP_METHOD : " + request.getMethod());

        logger.info("IP : " + request.getRemoteAddr());

        logger.info("CLASS_METHOD : " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());

        logger.info("ARGS : " + Arrays.toString(joinPoint.getArgs()));

       //获取所有参数方法一:

        Enumeration<String> enu=request.getParameterNames(); 

        while(enu.hasMoreElements()) 

            String paraName=(String)enu.nextElement(); 

            System.out.println(paraName+": "+request.getParameter(paraName)); 

         

     

     

     @AfterReturning("webLog()")

     publicvoid  doAfterReturning(JoinPoint joinPoint)

       // 处理完请求,返回内容

        logger.info("WebLogAspect.doAfterReturning()");

     

以上是关于SpringCloud快捷创建注解切面的主要内容,如果未能解决你的问题,请参考以下文章

Spring框架系列(10) - Spring AOP实现原理详解之AOP代理的创建

阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置

SpringCloud开发学习总结—— 结合注解的AOP示例

Spring面向切面编程AOP(around)实战

SPRING学习(十九)--基于注解的AOP切面编程

Spring AOP—注解配置方法的使用