springboot使用AOP实现切面编程

springboot使用AOP实现切面编程

之前看日志里面有用到aop的技术所以想照着做一个过程如下

1创建一个@interface文件

package io.sirc.common.annotation;

import java.lang.annotation.*;

/**
 * 系统日志注解
 *
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SysQueryLog {

	String value() default "";
}

2创建一个调用它的类,注意其中地址指向io.sirc.common.annotation.SysQueryLog是前面那货的地址

package io.sirc.common.aspect;

import io.sirc.common.utils.HttpContextUtils;
import io.sirc.common.utils.IPUtils;
import io.sirc.common.utils.R;
import io.sirc.modules.sea.entity.GetDataResponse;
import io.sirc.modules.sys.entity.SysQueryLogEntity;
import io.sirc.modules.sys.entity.SysUserEntity;
import io.sirc.modules.sys.service.SysQueryLogService;
import io.sirc.modules.sys.service.SysUserService;
import net.sf.json.JSONObject;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;


/**
 * 系统日志,切面处理类
 *
 */
@Aspect
@Component
public class SysQueryLogAspect {
	@Value("${isLocal}")
	private  boolean isLocal;

	@Autowired
	private SysQueryLogService sysQueryLogService;

    @Autowired
    private SysUserService sysUserService;
	
	@Pointcut("@annotation(io.sirc.common.annotation.SysQueryLog)")
	public void logPointCut() { 
		
	}
}

3.在SysQueryLogAspect 中添加方法,当然可以使用好几种标签@before,@after之类的  因为我现在需要的是进来之前判断参数中是否含有某些值 ,如果存在则中断不执行,执行方法后在执行日志插入操作,就使用@Around了,这样一下俩都能实现,

其中point是传进方法的参数,result是返回回去的值 ,point.proceed()是执行需要的接口,写在这上面的是调用接口之前执行的方法,写在下面的是执行之后的方法

@Around("logPointCut()")
	public GetDataResponse around(ProceedingJoinPoint point) throws Throwable {
        GetDataResponse result = new GetDataResponse();
        long beginTime = System.currentTimeMillis();
		//执行时长(毫秒)
		
		JSONObject jo = getParam(point);
        if(!isQueryLock(jo)) {
            result.setData(new R().ok().put("message","当前账号和ip已被锁定,请稍后再试。").toString());
            return result;
        }
        if(!isCompatible(jo)) {
            result.setData(new R().ok().put("message","当前账号和ip不匹配").toString());
            return result;
        }
        result= (GetDataResponse) point.proceed();
        long time = System.currentTimeMillis() - beginTime;
        saveSysQueryLog(jo, time);

		return result;
	}

4.在接口前面加上标签

@SysQueryLog
    public GetDataResponse getDataRequest(@RequestParam Map<String, Object> params) {
    //执行接口代码~~~~~~~~~~~~~~~~~
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2213.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言——经典200道实例【基础例题100道——进阶例题100道】[通俗易懂]

    C语言——经典200道实例【基础例题100道——进阶例题100道】[通俗易懂]目录:===============================基础例题100道===============================1.输出”Hello,World!”2.输出整数3.输出单个字符4.输出浮点数5.输出双精度(double)数6.两个整数相加7.两个浮点数相乘8.字符转ASCII码(1)一次读取长字符,并一个一个显示…

    2022年6月20日
    25
  • Linux共享文件夹的建立和使用

    Linux共享文件夹的建立和使用共享文件夹作用建立 window 和 linux 之间的通道 保证文件双方都可以使用

    2025年8月19日
    3
  • 继电器驱动电路原理及注意事项[通俗易懂]

    继电器驱动电路原理及注意事项[通俗易懂]继电器驱动电流一般需要20-40mA或更大,线圈电阻100-200欧姆,因此要加驱动电路  1. 晶体管用来驱动继电器,必须将晶体管的发射极接地。具体电路如下:NPN晶体管                            PNP晶体管 NPN晶体管驱动时:当晶体管T1基极被输入高电平时,晶体管饱和导通,集电极变为低电平,因此继电器线圈通电,触点RL1吸

    2022年6月24日
    24
  • 一篇文带你从0到1了解建站及完成CMS系统编写

    一篇文带你从0到1了解建站及完成CMS系统编写学习目标了解搭建一般网站的简便方式了解最原始一般站点搭建了解内容管理站点搭建了解权限设计及完成了解使用设计模式减少代码冗余了解前端拖拽页面生成及生成了解自定义数据的创建了解动态生成的前端页如何绑定自定义数据开发环境Windows7*64SP1php5.6apache/nginxthinkphp5.1mysqlphpstudy2018sqlyoglayoutit声明文章为从0到1了解内容管理系统搭建与编写,由于一篇文章内容篇幅过长,文章内容经过压缩,该项目中相

    2022年6月5日
    47
  • datagrip2020激活码mac_通用破解码

    datagrip2020激活码mac_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    46
  • M1卡/CUID卡格式化清卡操作方法

    M1卡/CUID卡格式化清卡操作方法CUID 卡是一种可以更改 0 扇区 0 块的特殊卡 很多朋友发现 CUID 卡写入一次之后再写就不让写了 认为卡已经废了 其实可以格式化清卡以后变空白卡 再次使用 普通 M1 卡也可以用该方法清卡 把卡片恢复成空白卡 一 把 CUID 卡放读写器上 打开 IC 卡操作软件 如下图二 把该卡的 dump 文件 拖进软件 或者用 读取 dump 文件 按钮打开卡文件 然后用默认的 keyA 密码清除卡片 点 清卡 按钮 如下图三 我们看到有部分扇区提示密码错误 这是控制位改变了 keyA 密码的操作权限 也就是说 keyA 没有清除卡片的

    2025年11月25日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号