首页 > 其他分享 >Springboot 自定义注解

Springboot 自定义注解

时间:2022-11-01 14:36:33浏览次数:74  
标签:Springboot 自定义 public result key returnType 注解 class

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyAnnotation {

    String key();

} 

  1. Annotation型定义为 @interface, 所有的Annotation会自动继承java.lang.Annotation这一接口,并且不能再去继承别的类或是接口.
  2. 参数成员只能用public或默认(default)这两个访问权修饰
  3. 参数成员只能用基本类型byte,short,char,int,long,float,double,boolean八种基本数据类型和String、Enum、Class、annotations等数据类型,以及这一些类型的数组.

@Documented 注解
功能:指明修饰的注解,可以被例如javadoc此类的工具文档化,只负责标记,没有成员取值。

@Retention 注解
功能:指明修饰的注解的生存周期,即会保留到哪个阶段。
RetentionPolicy的取值包含以下三种:
SOURCE:源码级别保留,编译后即丢弃。
CLASS:编译级别保留,编译后的class文件中存在,在jvm运行时丢弃,这是默认值。
RUNTIME: 运行级别保留,编译后的class文件中存在,在jvm运行时保留,可以被反射调用。

@Target 注解
功能:指明了修饰的这个注解的使用范围,即被描述的注解可以用在哪里。
ElementType的取值包含以下几种:

TYPE:类,接口或者枚举
FIELD:域,包含枚举常量
METHOD:方法
PARAMETER:参数
CONSTRUCTOR:构造方法
LOCAL_VARIABLE:局部变量
ANNOTATION_TYPE:注解类型
PACKAGE:包

@Pointcut("@annotation( com.ztesoft.zsmart.bss.ucc.cloud.annotation.MyAnnotation)")
    public void myPointCut() {
    }
 
@Aspect
@Component
public class MyInterceptor {
    @Pointcut("@annotation( com.ztesoft.zsmart.bss.ucc.cloud.annotation.MyAnnotation)")
    public void myPointCut() {
    }

    /**
     * 方法拦截
     *
     * @param pjp 拦截点
     * @return 执行结果
     * @throws Throwable 异常
     */
    @Around("myPointCut()")
    public Object doInterceptor(ProceedingJoinPoint pjp) throws BaseAppException {
        // logger.debug("doInterceptor begin..");
        Object result;
        MethodSignature signature = (MethodSignature) pjp.getSignature();
        // 获取被拦截的方法
        Method method = signature.getMethod();
        MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);

        Class returnType = method.getReturnType();
        signature.getParameterTypes();
        String key = myAnnotation.key();

        result = this.getResult(key, returnType);

        if (result == null) {
            try {
                result = pjp.proceed();
            }
            catch (Throwable t) {
                logger.warn("pjp.proceed() error ", t);
            }
        }

        return result;
    }
    
}

private Object getResult(String key, Class returnType) {
       
        String value = this.localParamMap.get(key);
        Object result;
        if (returnType == Long.class || returnType == long.class) {
            result = NumberUtils.toLong(value.trim());
        }
        else if (returnType == Integer.class || returnType == int.class) {
            result = NumberUtils.toInt(value.trim());
        }
        else if (returnType == Boolean.class || returnType == boolean.class) {
            result = Boolean.valueOf(value.trim());
        }
        else {
            result = value.trim();
        }
        
        return result;
    }    

 

参考

https://blog.csdn.net/liucy007/article/details/123827715

标签:Springboot,自定义,public,result,key,returnType,注解,class
From: https://www.cnblogs.com/suBlog/p/16847564.html

相关文章

  • springboot 请求参数 在swagger中 时间戳(Timestamp)被不断下拉展示
     在项目中,请求参数是Timestamp类型的在swagger显示如下: 对应的参数:@ApiModelProperty(value="查询时间-开始yyyy-MM-dd")privateTimestampstartDate;修改成:@A......
  • vue实战-完全掌握Vue自定义指令
    准备:自定义指令介绍除了核心功能默认内置的指令(v-model和v-show等),Vue也允许注册自定义指令。注意,在Vue2.0中,代码复用和抽象的主要形式是组件。然而,有的情况下,你......
  • SpringBoot静态资源访问
    分享知识传递快乐  默认静态资源映射规则SpringBoot默认将/所有访问映射到以下目录:/**classpath:/staticclasspath:/publicclasspath:/resourcesclasspath:/META-INF......
  • dialog.showMessageBox 自定义icon图标不显示问题
    icon:path.join(__dirname,'../dist/img/facebook.png')注意:开发环境无效,打包后才生效代码如下:dialog.showMessageBox({ //type:'warning', title:'退出提示',......
  • 注解用法详解——@SuppressWarnings
    作为一名有强迫症的程序员最见不得的事情之一就是程序里有警告出现,还有一大困扰就是在eclipseIDE中,起码前面有警告时会无法加入断点。一般来讲大多数警告是代码不规范或安......
  • 如何自定义HTTP 状态响应码(response code)
    一、什么是HTTP状态响应码/都有哪些状态响应码?   来自于Mozilla基金会网站的关于HTTP状态码的文章(​​​https://developer.mozilla.org/zh-TW/docs/HTTP/Response_co......
  • unity3d:xlua 加载自定义Loader
    在xLua加自定义loader是很简单的,只涉及到一个接口:publicdelegatebyte[]CustomLoader(refstringfilepath);publicvoidLuaEnv.AddLoader(CustomLoaderloader)通过A......
  • .net maui blazor创建存储自定义目录文件
    stringdir="/storage/emulated/0/Android/data/com.example.myapp/data";if(!Directory.Exists(dir)){Directory.Create......
  • pgsql 自定义函数
    CREATEORREPLACEFUNCTIONtest1(idINTEGER,id1INTEGER)RETURNSINTEGERLANGUAGEplpgsqlAS$$declarecountinteger;begincount=(selectarray_positio......
  • k8s.HPA.使用自定义指标Pod扩容
    k8s.HPA.使用自定义指标Pod扩容环境env:kubernetesv1.22metrics-server0.6.1prometheusv2.36.1prometheus-adapter.v0.10.0概述弹性伸缩1、资源层弹性,如......