• Java自定义注解的实现


    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);
        }
    

      

  • 相关阅读:
    Server-Sent Events(SSE) 简单实现和避坑
    使用ZIP进行多文件保存和读取(JDK1.7之后ZipOutputStream已经支持中文)
    IO
    页面临时添加a元素来模拟上传下载
    Centos 7启动jar包的详细步骤
    Redis 下载地址
    永久关闭win10自动更新
    同一命名空间下,无法引用类时
    Web应用程序项目******已配置为使用IIS。未能找到Web服务器
    VS2012打开项目 提示Asp.net4.0未在web服务器上注册的解决方案
  • 原文地址:https://www.cnblogs.com/therunningfish/p/8538849.html
Copyright © 2020-2023  润新知