zoukankan      html  css  js  c++  java
  • Aspect切面的使用实例

    一、导入切面库

    以maven工程为例,除了springmvc基础的库,需要导入切面库,本例aspectj为例。

        <properties>
            <aspectj.version>1.9.3</aspectj.version>
        </properties>
      ......
        <!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>${aspectj.version}</version>
        </dependency>

    二、编写基础植入的类,以打印功能为例。

    不得不歌颂一下注解和Spring,引入和配置大大的简化了。

    @Aspect
    @Slf4j
    @Component
    public class LogAspectUtil {
        @Pointcut("execution(public * com.sanro.controller..*.*(..))")//配置需要植入打印的包路径
        public void controllerLog() {
        }
    
        @Before("controllerLog()")
        public void logBefore(JoinPoint joinPoint) {
            RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = ((ServletRequestAttributes) requestAttributes).getRequest();
            log.info("full url = " + request.getRequestURL().toString());
            log.info("http method = " + request.getMethod());
            log.info("class method = " + joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
        }
    
        @After("controllerLog()")
        public void logAfter(JoinPoint joinPoint) {
            log.info("controller execute finished... ");
        }
    
    }

    三、坐享其成

    现在com.sanro.controller目录下的所有controller类都能
    1. 在请求进入的时候自动打印请求的url,method等想要的信息和处理动作;
    2. 在请求处理结束的时候都能打印时间或者增加想要的处理动作。
  • 相关阅读:
    vuePress搭建属于自己的站点。
    webpack打包取消所有的console.log语句
    浏览器使用input复制不成功解决办法。
    腾讯地图marker中大小的控制和事件绑定。
    VUE开发公众号IOS9白屏问题
    head.s 简单分析
    linux内核初始化控制流
    一直小菜鸟在学习飞翔。
    8种主要排序算法的C#实现
    我的Jquery参考词典
  • 原文地址:https://www.cnblogs.com/yoyotl/p/11185866.html
Copyright © 2011-2022 走看看