美文网首页
关于注解

关于注解

作者: 浩仔_Boy | 来源:发表于2021-01-30 17:28 被阅读0次

自己学习笔记,仅供自己参考,如有不对欢迎指正

1.source注解,生命周期存活与Java源文件(.java文件)
自定义的source注解 可以用来对 一些方法 或者参数进行约束,比如说指定线程 指定参数类型

2.class注解,生命周期在编译时 .class文件
配合apt 编写注解处理器, 对注解的类或者变量进行解析生成.class文件,进行辅助工作。使用的示例框架如:
arouter,在注解处理器中生成代码 帮你做 路径和 activity的路由表
butterknife的注解帮你做findviewbyid的工作

3.runtime注解,生命周期存活于运行时,内存中的字节码
是在runtime时还能存在的,通常配合反射机制,把注解标注的对象拿到进行操作。使用的示例框架如:
retrofit 通过反射机制,拿到注解的接口和接口中的方法,在通过动态代理生成接口的实现类
EventBus3 也支持runtime注解,通过反射机制获取订阅者中被注解标注的方法,然后把类信息和方法信息存入map。
关于EventBus3的实现原理:
参考:https://github.com/Moosphan/Android-Daily-Interview/issues/176

kotlin中注解Annotation.kt类的具体解释:
参考:https://blog.csdn.net/zx_android/article/details/106236304
在kotlin中使用注解的例子

package com.zhboy.myapplication.anotation

//-------------------------------定义注解---------------------------------------

@Target(
    //类注释
    AnnotationTarget.CLASS,
    //属性变量注释
    AnnotationTarget.FIELD,
    //函数方法注释
    AnnotationTarget.FUNCTION,
    //方法参数注释
    AnnotationTarget.VALUE_PARAMETER
)

@Retention(AnnotationRetention.RUNTIME)
annotation class RequestParam(val name: String, val value: String)

//-------------------------------使用注解---------------------------------------

@RequestParam(name = "这个类用来干啥", value = "泡茶")
class TeaRequest {

    @RequestParam(name = "茶的年份", value = "2021年")
    private var teaTime: String = "2021年"

    /**
     * 泡茶
     * @param cupColor 水杯颜色
     * @param teaType 茶的类型
     */
    @RequestParam(name = "方法的作用",value = "泡茶")
    private fun makeTea(
        @RequestParam(name = "水杯颜色", value = "红色")
        cupColor: String,
        @RequestParam(name = "茶的类型", value = "红茶")
        teaType: String
    ) {

    }
}
//-------------------------------获取注解的值---------------------------------------

//获取类上面的注解
fun getClassAnnotation() {
    val clazz = TeaRequest::class.java
    val annotation = clazz.getAnnotation(RequestParam::class.java)
    println("类注解的值: ${annotation?.name},${annotation?.value}")
}

//获取属性变量的注解
fun getFieldAnnotation() {
    val clazz = TeaRequest::class.java
    val annotations = clazz.declaredFields
    for (annotation in annotations) {
        val a = annotation.getAnnotation(RequestParam::class.java)
        println("属性变量注解的值: ${a?.name},${a?.value}")
    }
}

//获取函数上面的注解
fun getFunctionAnnotation() {
    val clazz = TeaRequest::class.java
    val annotations = clazz.declaredMethods
    for (annotation in annotations) {
        val a = annotation.getAnnotation(RequestParam::class.java)
        println("函数注解的值: ${a?.name},${a?.value}")
    }
}

//获取方法参数上注解的值
fun getParameterAnnotation() {
    val clazz = TeaRequest::class.java
    val me = clazz.getDeclaredMethod("makeTea", String::class.java, String::class.java)
    val parameterAnnotations = me.parameterAnnotations
    for (parameters in parameterAnnotations) {
        for (param in parameters) {
            if (param is RequestParam) {
                println("参数注解的值:${param.name},${param.value}")
            }
        }
    }
}

fun testAnnotation(){
    getClassAnnotation()
    getFieldAnnotation()
    getFunctionAnnotation()
    getParameterAnnotation()
}

相关文章

  • Spring Boot常用注解小结

    1、关于Controller层的一些注解。@ResponseBody 注解@RequestBody注解@Reque...

  • springframe参数注解

    关于参数问题的注解 @RequestParam@RequestBody@PathVariable 注解解释 @Re...

  • 初识java Annotation

    关于java Annotation什么是注解(Annotation) 注解的组成 自定义注解的语法以及定义形式 使...

  • 关于注解

    常见注解 lombok @Data -- getter和setter方法@Getter -- getter方法@S...

  • 关于注解

    自己学习笔记,仅供自己参考,如有不对欢迎指正 1.source注解,生命周期存活与Java源文件(.java文件)...

  • springboot

    18.6.15springboot中关于Bean的注解本节介绍注解:@Component@Service@Scop...

  • Android APT(Java注解应用)

    关于Java注解 一.APT技术 APT(Annotation Process Tool),注解处理器。用来在编译...

  • 大连滕泰科技学习笔记2020-06-11

    1,注解的分类 1,1 自己声明注解1,2 声明注解并进行赋值1,3 使用注解之后,进行对象赋值。 2,关于路径和...

  • java 基本语法之注解

    1. 注解定义 关于注解首先引入官方文档的一句话:Java 注解用于为 Java 代码提供元数据。作为元数据,注解...

  • Java注解

    在写java代码的过程中,经常会遇到注解,但是没有去理解注解背后的原理,也没有实现过注解。网上关于java注解的文...

网友评论

      本文标题:关于注解

      本文链接:https://www.haomeiwen.com/subject/xqkktltx.html