Java自定义注解的实现,总共三步(eg.@RandomlyThrowsException):

1.首先编写一个自定义注解@RandomlyThrowsException

package com.github.prontera;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; @Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
public @interface RandomlyThrowsException {
}

2.编写自定义注解@RandomlyThrowsException的实现

package com.github.prontera.aspect;

import com.github.prontera.config.ManualExceptionProperties;
import com.github.prontera.exception.ManualException;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.core.Ordered; import java.security.SecureRandom;
import java.util.Random; @Aspect
public class ManualExceptionAspect implements Ordered {
private final int order;
private final ManualExceptionProperties properties;
private static final Random RANDOM = new SecureRandom(); public ManualExceptionAspect(int order, ManualExceptionProperties properties) {
this.order = order;
this.properties = properties;
} @Around("@annotation(com.github.prontera.RandomlyThrowsException)")
public Object aroundMethod(ProceedingJoinPoint joinPoint) throws Throwable {
if (properties.isEnabled()) {
if (RANDOM.nextInt(100) % properties.getFactor() == 0) {
throw new ManualException("manual exception");
}
}
return joinPoint.proceed();
} @Override
public int getOrder() {
return order;
}
}

3.使用自定义注解@RandomlyThrowsException

    @Delay
@RandomlyThrowsException
@ApiOperation(value = "下单", notes = "生成预订单")
@RequestMapping(value = "/orders", method = RequestMethod.POST)
public ObjectDataResponse<Order> placeOrder(@Valid @RequestBody PlaceOrderRequest request, BindingResult result) {
return orderService.placeOrder(request);
}

  

最新文章

  1. centos 6.5 msyql5.6安装
  2. linux下PHP7环境搭建
  3. HTML超链接
  4. maven中文乱码问题——编译错误
  5. android自动更新软件版本
  6. eventlet的学习
  7. 最优雅的C++跟lua交互.
  8. HDU_1874——最短路问题,Dijkstra算法模版
  9. [stm32F429-DISCO-HAL] 1.先说说关于stm32Cube的一些事情。然后,Start with it...
  10. 补习系列(5)-springboot- restful应用
  11. Linux sleep 语句以及循环 测试负载
  12. P3332 [ZJOI2013]K大数查询(线段树套线段树+标记永久化)
  13. 【Redis】Redis学习(一) Redis初步入门
  14. C语言实现将彩色BMP位图转化为二值图
  15. LeetCode: Symmetric Tree 解题报告
  16. oracle 字段自增 两段代码搞定
  17. django 视图 使用orm values_list()方法获取 指定的 多个字段的数据
  18. Qt多线程-QThreadPool线程池与QRunnable
  19. 2015多校第6场 HDU 5353 Average 贪心,细节处理
  20. CSS3在hover下的几种效果

热门文章

  1. 搭建一个web服务下载HDFS的文件
  2. Swagger: 一个restful接口文档在线生成+功能测试软件
  3. Spring Security入门(3-6)Spring Security 的鉴权 - 自定义权限前缀
  4. 搭建ssm框架,可实现登录和数据展示以及增删改查
  5. My97设置开始、结束 时间区间及输入框不能输入只能选择的方法
  6. python当中的生成器
  7. windows下nginx代理ftp服务器
  8. Python/MySQL(二、表操作以及连接)
  9. GNU/Linux需要特别注意的目录
  10. Java面试题——中级(下)