(图片来源网络,侵删)
老规矩,定义一个注解:我们在想要进行频率限制的方法上添加注解:定义一个切面,代码如下(代码很长,可以跳到最后看分析):那么,在这里谈谈这个频率限制的大概实现:首先,被注解修饰的方法都会经过这个前置通知: 1)获取该切面的方法全名 2)从session当中通过这个方法全名获取对应的请求dto(dto使用哈希表与方法全名进行映射): 那么重点来了: 算法的核心是这段: 这段代码没有什么特别的地方,只是要注意的是increase和setRequestCount方法都要被synchronized关键字修饰,避免在并发的情况下出现数据不一致 最后,不可否认,为了快速实现这个功能,这段代码写的很烂,很多地方实现得都不优美比如这里的MINUTE常量可以让客户端程序员自行指定 ,这样就能拥有更多的灵活性
0 评论