Spring项目 AOP+自定义注解方式实现访问量统计功能

【网格生成】Gmsh快速入门教程 --1.图形化界面使用 初探 Gmsh软件的主界面如下图所示。通过点击菜单“File” -> "Open"可选择打开已经存在的几何模型或网格文件,初次使用可选择tutorial目录下的t1.geo文件。打开后效果如图所示,t1.geo描述的是一个长方体。 接下来依次尝试左侧菜单栏的功能:Geometry(几何)、Mesh(求解器)。Solver模块需依赖外置求解器,不在本文介绍范围内。 Geometry 该菜单下是与几何相关的功能,如新增一个点/面、体,移动一个体等,具体功能很多可以在后续使用中逐渐尝试学习。本文仅介绍几个 阅读详情

应用场景:统计某个接口的调用次数,调用参数。

一:需要引入的依赖

  <!-- aspectj相关jar包 aop 相关 -->
    <dependency>
      <groupId>aopalliance</groupId>
      <artifactId>aopalliance</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjrt</artifactId>
      <version>1.8.1</version>
    </dependency>
    <dependency>
      <groupId>org.aspectj</groupId>
      <artifactId>aspectjweaver</artifactId>
      <version>1.8.1</version>
    </dependency>

二:在spring-mvc.xml配置文件中开启切面扫描

    <aop:aspectj-autoproxy />

    <aop:config proxy-target-class="true"></aop:config>

 

三:创建自定义注解

import java.lang.annotation.*;

/**
 * controller层日志拦截注解
 *
 */
@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ControllerLog {

    String value() default "";
}

四:创建切面类

/**
 * AOP切面统计菜单点击次数
 */
@Aspect
@Component
public class LogAspect {
    //Controller层切入点
    @Pointcut("@annotation(com.niucheng.common.annotation.ControllerLog)")
    private void ControllerAspet(){
    }
    
    /**
     * 前置通知,统计菜单点击率
     * @param joinPoint
     */
    @Before("ControllerAspet()")
    private void doBefore(JoinPoint joinPoint){
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        //请求url
        System.out.println("------------url:"+request.getRequestURI());
        //调用的方法
        System.out.println("------------method:"+joinPoint.getTarget().getClass().getName() + "." + joinPoint.getSignature().getName() + "()");

        //请求的参数
        Map<String, String[]> properties = request.getParameterMap();
        Map<Object, Object> returnMap = new HashMap<Object, Object>();
        Iterator<Map.Entry<String, String[]>> entries = properties.entrySet().iterator();
        Map.Entry entry;
        String name = "";
        String value = "";

        while (entries.hasNext()) {
            entry = (Map.Entry) entries.next();
            name = (String) entry.getKey();
            Object valueObj = entry.getValue();
            if (null == valueObj) {
                value = "";
            } else if (valueObj instanceof String[]) {
                String[] values = (String[]) valueObj;
                for (int i = 0; i < values.length; i++) {
                    value = values[i] + ",";
                }
                value = value.substring(0, value.length() - 1);
            } else {
                value = valueObj.toString();
            }
            returnMap.put(name, value);
        }
        System.out.println("------------param:"+returnMap.toString());
        
    }

}

五:测试

在Controller层加上@ControllerLog()注解

    @ControllerLog()
    @RequestMapping("/cheng")
    public void test(){
        System.out.println("------");
    }

输出结果:

DrissionPage实战:5分钟搞定京东滑块验证码自动登录(附完整轨迹生成代码) 本文详细介绍了如何使用DrissionPage工具实现京东滑块验证码的自动化登录,包括环境配置、滑块缺口识别、拟人化轨迹生成算法及完整登录流程。通过物理运动学模型和智能识别技术,有效提升验证码破解成功率,适用于电商自动化场景。 阅读详情

相关推荐

STM32F103RC学习(一)

STM32F103RC学习(一)

Cat_South_North的博客 6055

Spring基础总结(上)

通过调用对象的无参构造方法创建一个新对象,然后通过依赖注入得到bean对象(默认单例)依赖注入这一步对新对象中添加了 @Autowired 或者@Resource 等注解的属性赋值,得到 Bean 对象,如下是一段伪代码//1.通过无参构造函数创建一个新对象 userService UserService userService = new UserService();

少年闰土 871

从CTF到实战:Frida Hook无导出SO函数的3种特殊姿势

本文深入探讨了在移动安全逆向工程中,如何利用Frida Hook无导出SO函数的三种高级技巧:字符串引用定位法、调用栈回溯法和内存特征码扫描。针对安卓So层加固和混淆场景,文章结合CTF赛题与实战案例,详细解析了每种方法的原理、实现步骤与适用场景,为安全研究人员提供了从理论到实践的完整解决方案。

jenkins8butler的博客 515

Spring Boot统计一个Bean中方法的调用次数

有了这个注解之后,我们可以在想要统计的方法上加上这个注解名称随便起但要见名知意/***/@Retention(RetentionPolicy.RUNTIME)// 指定注解的保留策略为RUNTIME@Target(ElementType.METHOD)// 指定该注解可以用于方法通过该切面来对这个注解进行增强处理/***/@Aspect// 声明这是一个切面@Component// 声明这是一个Spring Bean(交给Spring管理)

蒾酒的博客 4216

java实现mavlink协议解析与封包上传数据,实现mavlink数据交互,附带代码、详解

本篇文章介绍了使用java来进行mavlink协议解析,封包与解包的过程,并附带源码供大家使用。MAVLink(Micro Air Vehicle Link,微型空中飞行器链路通讯协议)是无人飞行器与地面站(Ground Control Station ,GCS)或云端服务器之间通讯,以及无人飞行器之间通讯最常用的协议。它已经在PX4、APM、PIXHAWK和Parrot AR.Drone飞控平台上进行了大量测试。

qq_30279827的博客 1446

STM32控制舵机SG-5010转动,HAL库

首先设置时钟为72Mhz,预分频系数为72-1,自动重装载计数器的值为5000-1,这样的话就可以得到一个5ms的脉冲宽度,5000的计数值可以让舵机的旋转角度变得更加易控且相对精准,计算旋转角度的时候也可以更加精确。所以我们5ms脉宽,period是5000脉宽-------------角度----------pulse0.5ms-------------0度----------500;1.0ms------------45度---------1000;

qq_73783264的博客 1291

SpringBoot使用AOP完成对全局接口访问次数的统计

由于项目中需要统计全局接口访问次数,所以简单使用AOP实现了该功能。

Devbor的博客 4698

从零开始的BW(五) 外部系统供数之OData测试

5、激活添加的服务,如提示下图中的激活失败,根据生成URI在事务代码SICF目录中找到对应的服务,设置超时时间,设置完之后重新激活即可,详情可参考SAP note 1986626。如果刚才设置BY Odata的query在这没有显示,SE38执行程序EQ_RS_AUTOSETUP,选中需要生成服务的query,生成服务后再去添加服务。测试get方法,URI中默认的参数是?4、事务代码/IWFND/MAINT_SERVICE中添加服务,如果提示用户不再登陆,在事务代码前加上/O或者/N即可。

m0_61386064的博客 1105

SSM或SpringMvc实现session统计在线人数或网站访问量等思路

文章目录前言一、实现思路?二、使用步骤1.maven下的SSM项目或springMVC项目2.拦截器实现3.监听器实现总结 前言 前段时间做项目时,涉及到调用第三方IP查询接口用来统计网站访问,以及访问地址。经过各方百度后,最后总结出一个可以实现的方法。项目背景:spring+springMvc+mybatis,使用的前后端分离架构 一、实现思路?        之前一直以为当用户访问项目时,系统就会为用户创建一个HttpSessio

weixin_45885574的博客 2350

字符串尾部空格的迷思:深入解析 ABAP 隐式转换规则与 `strlen` 意外结果

看似简单的strlen之谜,背后实则是 ABAP 隐式转换的一整套严谨规则。只要开发者在赋值、输出、接口映射等关键节点建立“尾部空格意识”,辅以CONVCONDENSE等显式手段,就能有效杜绝多余空格引发的链式故障。希望本文的拆解与案例,能让你在面对下一个“异常长度”时,从容而笃定地给出正确答案。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 429

duilib 之 事件--bubbled冒泡事件应用、通用点击事件、进入离开事件、XML样式中直接添加事件

1. box 绑定点击事件 ui::Box *pSmallVideoBox = (ui::Box*)FindControl(L"rightBox"); if (pSmallVideoBox) { auto SwitchVideo = [this](ui::EventArgs* param){ m_bSecScreenIsScale = m_bMainScre...

目前打算换一个工作,有招聘windows c++方向的也欢迎联系,北京、济南 最好 972

springMVC系列(六)——拦截器实现自定义注解接口访问限制

通过自定义注解形式实现接口访问评论限制 1.自定义注解,访问限制值和时间放在注解的参数中 RequestLimit.java注解 @Retention(RetentionPolicy.RUNTIME) public @interface RequestLimit { /** * * 允许访问的次数,默认值MAX_VALUE */ intc

咸鱼老罗的博客 5548

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

springboot+redis+aop 实现页面访问量统计功能

springboot实现页面统计 使用springboot+redis+spring aop+spring schedule实现页面访问量统计功能 思路介绍 页面访问访问量统计,常用的springboot项目中,我们的controller的获取文章的方法主要是 public class Controller{ @GetMapping("/blogs/get/{blogId}") public String get(Model model,@PathVariable("blogId") Int

yaologos的博客 8795

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

利用Spring AOP处理自定义注解

(http://hi.baidu.com/coolcooldool/item/1ee37d258542b48f9d63d10a) Spring3.0中加入了对缓存的注解支持,即当你使用ehcache时可以使用例如@cachable等注解,这十分方便,省去了80%的缓存代码量(我自己感觉,因为自己操作缓存挺麻烦的)。         但是却遇到了一个问题,我的项目到时候需要tomcat集

狼烟烽火 5874

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Spring Boot 切面编程(AOP)详细教程

Spring Boot 切面编程(AOP)是Spring的核心功能之一,掌握它能让你的代码更优雅、更易维护。

奔跑的坏蜗牛 4624

AspectJ简单实现某些功能的PV统计

1.场景    在项目中,需要对某些功能或者接口进行PV统计,那么这些需求一般在项目初期可能不会出现。如果项目基本开发完成,或者在迭代的过程中需要增加PV等统计功能,那么,最原始的做法是在原有代码的基础上增加统计代码,但这样一来,对原有的代码有入侵性,而且与主业务逻辑耦合,代码可读性以及维护性和扩展性会非常差。2.思路    如果项目中使用了Spring,可以通过Aop的方式,对原有需要进行统计的...

mutianyang1的博客 874

Spring学习笔记(三)Spring注解方式实现AOP

上篇文章写了怎么使用Proxy类和CGLIB提供的类实现AOP; Spring实现AOP也提供了两种方式——注解方式和xml配置方式, 但是大部分的项目都使用的是注解方式; 要使用注解实现AOP首先要在Spring的配置文件中打开aop注解解析引擎: <beans xmlns="http://www.springframework.org/schema/beans" xmlns:x

金禅的专栏 1100

自定义注解实现接口被访问时增加对应模块浏览量

一、什么是注解? 注解的定义:Java文件叫做Annotation,用@interface表示,注解是一种能被添加到java代码中的元数据,类、方法、变量、参数和包都可以用注解来修饰。注解对于它所修饰的代码并没有直接的影响。 元注解:包括@Retention、@Target、@Document、@Inherited四种。 @Documented – 注解是否将包含在JavaDoc中 @Retention – 什么时候使用该注解 @Target – 注解用于什么地方 @Inherite

qq_45473439的博客 408

SpringAop的使用教程

前情 这段时间想用AOP写个访问量功能,所以特地学习了一下AOP.记录一下AOP的使用方法。 AOP是什么 AOP (Aspect-oriented Program) ,面向切面编程。一般我们在使用OOP也就是面向对象编程的时候,我们的关注点在于一个完整的对象和另外一个完整对象之间的交互,而AOP的关注点在于对象的方法,也就是对象的行为。AOP就是用来增强对象的行为。换句话说,就是我希望对象在做出行为的时候,我需要给这个行为附加额外的行为,我们就可以使用AOP去实现这个功能。比如我们想要有人访问我接口的

LinHongHu2的博客 368

Springboot使用aop实现性能统计

引包 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> /** * @Date: 2020/7/15 20:56 * @Description: */ @Slf4j @Aspect @Compone.

m0_46425463的博客 963

aop实现java接口访问次数_Spring Boot2集成AOPLog来记录接口访问日志

前言日志是一个Web项目中必不可少的部分,借助它我们可以做许多事情,比如问题排查、访问统计、监控告警等。一般通过引入slf4j的一些实现框架来做日志功能,如log4j,logback,log4j2,其性能也是依次增强。在springboot中,默认使用的框架是logback。我们经常需要在方法开头或结尾加日志记录传入参数或返回结果,以此来复现当时的请求情况。但是手动添加日志,不仅繁琐重复,也影响代...

weixin_33603397的博客 467

简单好用!利用Spring AOP技术10分钟实现一个读写分离方案

点击上方好好学java,选择星标公众号重磅资讯、干货,第一时间送达 今日推荐:2020年7月程序员工资统计,平均14357元,又跌了,扎心个人原创100W+访问量博客:点击前...

好好学java 402

利用AOP切面和redis记录目前接口访问量,超过访问上限便拒绝

记录一下目前接口的访问量,超过一定访问数量就拒绝之后的访问。添加这个注解放在controller上,进行接口的控制。

qq_41458023的博客 679

查询网站在线人数

每种方法都有其适用场景,可以根据项目的具体需求选择合适的实现方式。在实现时,需要注意线程安全和数据一致性,确保在线人数的统计准确无误。

2401_87715607的博客 740

14.Spring Boot监听器、过滤器、拦截器

在SpringBootApplication启动类上使用@ServletComponentScan注解后,Servlet、Filter、Listener可以直接通过@WebServlet、@WebFilter、@WebListener注解自动注册,无需其他代码。

相互学习 共同进步 544

SpringBoot接口防刷与限流实战:从原理到Redis+AOP实现

在分布式系统与高并发场景下,接口限流是保障服务稳定性的核心技术之一。其核心原理是通过控制单位时间内的请求数量,防止突发流量压垮系统资源。从技术价值看,有效的限流能够避免服务雪崩、保障核心业务,并提升系统整体的可用性与健壮性。常见的应用场景包括登录防暴力破解、秒杀活动、API调用配额管理等。为实现分布式环境下的精准控制,通常需借助Redis等高性能缓存存储计数状态,并结合AOP(面向切面编程)实现无侵入式的统一拦截。本文以SpringBoot项目为例,深入探讨了如何整合Redis与自定义注解,构建一套可应对接

weixin_33802505的博客 387
上一篇: Apache BeanUtils与Spring BeanUtils的拷贝性能比较
下一篇: SpringBoot项目AOP+自定义注解实现菜单点击量统计
你愁啥啊
博客等级 码龄11年 8粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值