自定义注解使用笔记(欢迎指教)

自定义注解笔记:
    自定义注解的创建其实跟创建class一样,只不过咱们创建class的时候选择的是Class,自定义注解无非选择的就是Annontation,
    在创建好的类上加上@[email protected]@Retention
    @Documented 注解表明这个注解应该被 javadoc工具记录. 默认情况下,javadoc是不包括注解的. 但如果声明注解时指定了 @Documented,则它会被 javadoc 之类的工具处理, 所以注解类型信息也会被包括在生成的文档中,是一个标记注解,没有成员。
    @Target说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更加明晰其修饰的目标。
    @Retention可以用来修饰注解,是注解的注解,称为元注解。
        Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型,
        这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配 RententionPolicy使用。RetentionPolicy有3个值:CLASS  RUNTIME   SOURCE
        按生命周期来划分可分为3类:
        1、RetentionPolicy.SOURCE:注解只保留在源文件,当Java文件编译成class文件的时候,注解被遗弃;
        2、RetentionPolicy.CLASS:注解被保留到class文件,但jvm加载class文件时候被遗弃,这是默认的生命周期;
        3、RetentionPolicy.RUNTIME:注解不仅被保存到class文件中,jvm加载class文件之后,仍然存在;
        这3个生命周期分别对应于:Java源文件(.java文件) ---> .class文件 ---> 内存中的字节码。
        那怎么来选择合适的注解生命周期呢?
        首先要明确生命周期长度 SOURCE < CLASS < RUNTIME ,所以前者能作用的地方后者一定也能作用。
        一般如果需要在运行时去动态获取注解信息,那只能用 RUNTIME 注解,比如@Deprecated使用RUNTIME注解
        如果要在编译时进行一些预处理操作,比如生成一些辅助代码(如 ButterKnife),就用 CLASS注解;
        如果只是做一些检查性的操作,比如 @Override 和 @SuppressWarnings,使用SOURCE 注解。
    
    首先创建一个自定义注解类 在类上面添加上述的三个注解,根据业务需求选择需要的value数据
    
    然后自定义注解就已经完成了
    
    接下来是根据自己的业务逻辑来看注解的使用场景
    比如我最近在工作中遇到的一个需求,就是鉴权某方法是否可以允许调用的场景,当时想到的就是使用自定义注解+aop切面来实现的(以下内容纯属自己的笔记,欢迎指教)
    自定义注解使用笔记(欢迎指教)
    自定义注解使用笔记(欢迎指教)
    
    自定义注解使用笔记(欢迎指教)
    还有忠告自己的就是能不用jap就不用jap(这个坑有点深)