实际工作中哪里用到了自定义注解的方法(2)
导读:实际工作中哪里用到了自定义注解的方法,④ 使用自定义注解 将自定义注解应用于需要进行日志记录的方法上,如下代码所示: @RestControllerpublic class MyController { @CustomLogAnnotation(value = "This is a tes
实际工作中哪里用到了自定义注解的方法
④ 使用自定义注解
将自定义注解应用于需要进行日志记录的方法上,如下代码所示:
@RestController
public class MyController {
@CustomLogAnnotation(value = "This is a test method", enable = true)
@GetMapping("/test")
public String testMethod() {
// 业务逻辑代码
return "Hello from the annotated method!";
}
}
2.实际工作中的自定义注解
实际工作中我们通常会使用自定义注解来实现如权限验证,或者是幂等性判断等功能。
“
幂等性判断是指在分布式系统或并发环境中,对于同一操作的多次重复请求,系统的响应结果应该是一致的。简而言之,无论接收到多少次相同的请求,系统的行为和结果都应该是相同的。”
3.如何实现自定义幂等性注解?
下面我们使用拦截器 + Redis 的方式来实现一下自定义幂等性注解,它的实现步骤如下:
- 创建自定义幂等性注解。
- 创建拦截器,实现幂等性逻辑判断。
- 配置拦截规则。
- 使用自定义幂等性注解。
具体实现如下。
① 创建自定义幂等性注解
@Retention(RetentionPolicy.RUNTIME) // 程序运行时有效
@Target(ElementType.METHOD) // 方法注解
public @interface Idempotent {
/**
* 请求标识符的参数名称,默认为"requestId"
*/
String requestId() default "requestId";
/**
* 幂等有效时长(单位:秒)
*/
int expireTime() default 60;
}
② 创建拦截器
@Component
public class IdempotentInterceptor extends HandlerInterceptorAdapter {
@Autowired
private RedisTemplate<String, Object> redisTemplate;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
Method method = ((HandlerMethod) handler).getMethod();
Idempotent idempotent = method.getAnnotation(Idempotent.class);
if (idempotent != null) {
// 获取请求中的唯一标识符
String requestId = obtainRequestId(request, idempotent.requestId());
// 判断该请求是否已经处理过
if (redisTemplate.opsForValue().get(idempotentKey(requestId)) != null) {
// 已经处理过,返回幂等响应
response.getWriter().write("重复请求");
return false;
} else {
// 将请求标识符存入Redis,并设置过期时间
redisTemplate.opsForValue().set(idempotentKey(requestId), "processed", idempotent.expireTime(), TimeUnit.SECONDS);
return true; // 继续执行业务逻辑
}
}
return super.preHandle(request, response, handler);
}
private String idempotentKey(String requestId) {
return "idempotent:" + requestId;
}
private String obtainRequestId(HttpServletRequest request, String paramName) {
// 实现从请求中获取唯一标识符的方法
return request.getParameter(paramName);
}
}
相关阅读
-
什么是云堡垒机 有哪些功能及优势?
今天小编介绍什么是云堡垒机IT技巧方面的经验,接下来IT袋网小编就来介绍。 云堡垒机(Cloud Bastion Host,CBH)是在云计算环境中使用的一种安全工具,类似于传统网络中的堡垒机。 云堡垒机
-
OSI七层网络模型物理层详解 物理层的主要功能和特点有哪些
下面为网友们详细介绍OSI七层网络模型物理层详解的相关话题,接下来一起来看看吧。 物理层是OSI模型中的第一层,它负责在物理媒介上传输原始比特流,并定义了传输介质、传输速率、编码
-
网站建设开发解决方案 网站设计与规划了解
小编为你讲解网站建设开发解决方案和网站设计与规划了解的内容,一定能解决您的问题的,一起来了解吧! 企业网站作为企业在互联网上的形象,对于企业来说是至关重要的,一个好的企业
-
什么是跨站脚本 XSS攻击?
为网友解答什么是跨站脚本的相关话题,下面为详细的介绍。 跨站脚本(Cross-Site Scripting,XSS)是一种常见的网络安全漏洞,攻击者利用该漏洞在受害者的网页中插入恶意脚本,从而能够获取


