Java基础-注解和反射

Java基础-注解和反射


前言

对于注解,我主要还是在自定义APT还有运行时反射获取类来让自己能够构建出复用性更高的代码逻辑。


知识点1-注解:

注解的应用场景由元注解@Retention来进行指定,共有三种选项可以进行进行选择,SOURCE,CLASS,RUNTIME,如下:

public enum RetentionPolicy {
    /**
     * Annotations are to be discarded by the compiler.
     */
    SOURCE,

    /**
     * Annotations are to be recorded in the class file by the compiler
     * but need not be retained by the VM at run time.  This is the default
     * behavior.
     */
    CLASS,

    /**
     * Annotations are to be recorded in the class file by the compiler and
     * retained by the VM at run time, so they may be read reflectively.
     *
     * @see java.lang.reflect.AnnotatedElement
     */
    RUNTIME
}

一,SOURCE源码,源码级别的注解

注解的生命周期只存在于源码范围内,常常用来在编译的时候通过APT(Annotation Processor Tools)来生成辅助类。我所见到的情况就是在编译的时候生成MVP框架辅助代码。

除了应用在APT之外,对于源码的注解还应用在IDE语法检查中,比如@IntDef。比如说,android对于资源的定义一般是通过定义一个id的方式来进行的,但是id往往是通过int来表示的。如果你定义一个方法,方法中需要传输比如说R.string类型的参数,这里就可以通过定义一个IDE语法检查的注解,那么在IDE编译的时候就能进行语法检查。

当然你的IDE必须要支持语法检查才行,你总不可能过分的要求一个“全裸”的文本编辑器给你做到这些吧= =,这个未免太过于苛刻了。

二,CLASS字节码,字节码级别的注解

注解的生命周期可以到达字节码范围内,这个就涉及到我的知识盲区了,我找一下资料研究研究。

字节码级别的注释的常见应用就是:字节码增强技术,也就是在字节码中写代码,在热修复中会有很大程度上的使用。

三,RUNTIME运行时

运行时级别的注解,也就是在程序运行期间,通过反射技术动态获取注解与其元素,从而完成不同的逻辑判定。


后记

本来也想讲讲反射的相关技术的,然后,说真的,反射这块涉及到的内容实在太大了。我真的并不认为自己在当前的情况中能够很好地将自己很好地将所有的这一切都融汇贯通,所以,对于反射这一块内容,等我理清楚了热修复,字节码这两块再专门再来料理你。

猜你喜欢

转载自blog.csdn.net/qq_31433709/article/details/107887676
今日推荐