All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ideaaedi.commonspring.lite.antidupli.AntiDuplication Maven / Gradle / Ivy

There is a newer version: 2100.10.10.LTS17
Show newest version
package com.ideaaedi.commonspring.lite.antidupli;

import org.springframework.expression.BeanResolver;
import org.springframework.expression.common.TemplateParserContext;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.concurrent.TimeUnit;

/**
 * 防重复
 * 

*

 * 子注解写法示例(子注解中可部分或全部重写@AntiDuplication中的属性):
 * | @AntiDuplication
 * | @Target(value = ElementType.METHOD)
 * | @Retention(value = RetentionPolicy.RUNTIME)
 * | public @interface MyAntiDuplication {
 * |     @AliasFor(annotation = AntiDuplication.class)
 * |     String spel() default "";
 * |
 * |     @AliasFor(annotation = AntiDuplication.class)
 * |     long during() default 1L;
 * |
 * |     @AliasFor(annotation = AntiDuplication.class)
 * |     TimeUnit unit() default TimeUnit.SECONDS;
 * | }
 * 
* * @author JustryDeng * @since 2100.7.3 */ @Retention(value = RetentionPolicy.RUNTIME) @Target(value = {ElementType.METHOD, ElementType.TYPE}) public @interface AntiDuplication { /** * 防重的相关spel (支持spel) *
     *  spel表达式(注:因为本方法中用到了{@link TemplateParserContext}, 所以需要使用#{}将原生的spel包起来,形成最终的表达式)
     *  1、获取属性示例:{@code #{#param1.fieldA} }
     *  2、调用方法示例:{@code #{#param2.methodA()} }
     *  3、调用spring-bean示例:{@code #{@userService.getUsername(#userId)}},
     *     注:使用之前需要初始化bean解析器{@link com.ideaaedi.commonspring.parser.SpelUtil#initBeanResolver(BeanResolver)}
     *        初始化bean解析器示例:{@code SpelUtil.initBeanResolver(new BeanFactoryResolver(applicationContext)); }
     *  4、调用静态字段示例:{@code #{T(org.springframework.core.Ordered).HIGHEST_PRECEDENCE} }
     *     注:若调用的是java.lang.包下的类,可以不指定包名
     *  5、调用静态方法示例:{@code #{T(java.util.Objects).nonNull(#returnObj)} }
     *     注:若调用的是java.lang.包下的类,可以不指定包名
     *  6、枚举示例1:{@code {T(com.ideaaedi.demo.enums.CachePrefixEnum).USER_ACCOUNT_PHONE.name()} }
     *     注:和调用静态方法是一样的
     *  7、枚举示例2:{@code #{T(com.ideaaedi.demo.enums.CachePrefixEnum).USER_ACCOUNT_PHONE.key(#user.account, #user.phone)} }
     *     注:和调用静态方法是一样的
     *  8、判断示例1:{@code #{#code == 200} }
     *  9、判断示例2:{@code #{#user == null} }
     *  10、......
     *
     *  更多spel语法见{@link com.ideaaedi.commonspring.parser.SpelUtil}
     * 
*/ String spel() default ""; /** * 时长 */ long during() default 3L; /** * 时长单位 */ TimeUnit unit() default TimeUnit.SECONDS; /** * 提示信息 */ String message() default ""; }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy