zoukankan      html  css  js  c++  java
  • 基于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>

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

  • 相关阅读:
    单片机编程时易错总结 20181015 项目:3060-A
    UCOS 多任务系统中需要注意的地方 一个任务至少要有一些执行内容
    LDO-AMS1117
    DCDC与LDO
    电容器的ESR
    Class AB与Class D功放
    驻极体麦克风
    音频处理的技术指标
    I2S接口工作原理
    有关功放输入端的探究
  • 原文地址:https://www.cnblogs.com/Mustr/p/9372038.html
Copyright © 2011-2022 走看看