• 基于spring@aspect注解的aop实现


    第一步:编写切面类

    package com.dascom.hawk.app.web.tool;
    
    import org.aspectj.lang.JoinPoint;
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.After;
    import org.aspectj.lang.annotation.Around;
    import org.aspectj.lang.annotation.Aspect;
    import org.aspectj.lang.annotation.Before;
    import org.aspectj.lang.annotation.Pointcut;
    import org.springframework.stereotype.Component;
    
    @Aspect
    @Component
    public class AnnotationAspectJ {
    
        //定义切面("execution(* com.dascom.common.aop.*.*(..)))
        //当前配置的意思是所有添加了SuiteMessage的注解的方法作为切点
        @Pointcut("@annotation(com.dascom.common.annotation.SuiteMessage)")
        public void logPointCut() {
        }
        
        //前置通知
        @Before("logPointCut()")
        public void before(JoinPoint point) {
            String calssName = point.getTarget().getClass().getName();
            String method = point.getSignature().getName();
            System.out.println(calssName + " : " + method);
        }
        
        //后置通知
        @After("logPointCut()")
        public void after(JoinPoint point) {
            String method = point.getSignature().getName();
            System.out.println(method + ": end----");
        }
        
        //环绕通知
        @Around("logPointCut()")
        public Object around(ProceedingJoinPoint point) throws Throwable {
            long beginTime = System.currentTimeMillis();
            // 执行方法
            Object result = point.proceed();
            // 执行时长(毫秒)
            long time = System.currentTimeMillis() - beginTime;
            //异步保存日志
            System.out.println(time);
            return result;
        }
    }

    第二步:在spring的配置文件中添加注解扫描

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
        <!-- 配置自动扫描的包 -->
        <context:component-scan base-package="com.dascom.hawk.app.web.tool"></context:component-scan>
        <!-- 自动为切面方法中匹配的方法所在的类生成代理对象。
           proxy-target-class="true" 这个的作用是struts的控制类都基础的actionSupport,必须添加这个,不然会报错
         -->
        <aop:aspectj-autoproxy proxy-target-class="true" />
        
    </beans>

    第三步:搞定。爽歪歪~~~

  • 相关阅读:
    PHP7 快速编译安装
    php访问url的四种方式
    php获取文件 return array数组的值
    thinkphp3.2自定义success及error跳转页面
    think php 访问时
    vtk点云数据的显示[转]
    strlen() 和 sizeof() 在字符串中的使用
    函数 MultiByteToWideChar() 详解
    函数WideCharToMultiByte() 详解
    wchar_t 和 char 之间转换
  • 原文地址:https://www.cnblogs.com/Mustr/p/9372038.html
Copyright © 2020-2023  润新知