• 基于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>

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

  • 相关阅读:
    [Linux]Vmwaer创建CENTOS7虚拟机[转]
    [游记]二访金陵
    [Android]ADB调试: SecurityException: Injecting to another application requires INJECT_EVENTS permission
    [操作系统]记一次未尽的三星 Galaxy A6s(SM-G6200)刷机过程
    [网络]NAT与内网穿透技术初探【待续】
    结构化系统建模之程序流程图|系统流程图|数据流图
    UML系统建模之用例视图
    [Linux]常用命令之【mkdir/touch/cp/rm/ls/mv】
    [Linux]监控外部用户登录及外部主机连接情况
    [Java SE]Unicode解码
  • 原文地址:https://www.cnblogs.com/Mustr/p/9372038.html
Copyright © 2020-2023  润新知