# qrcode_annotation **Repository Path**: gwcc/qrcode_annotation ## Basic Information - **Project Name**: qrcode_annotation - **Description**: 二维码和自定义注解 - **Primary Language**: Unknown - **License**: AFL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-16 - **Last Updated**: 2025-10-15 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 注解就是一种标志,单独使用注解,就相当于在类、方法、参数和包上加上一个装饰,什么功能也没有,仅仅是一个标志,然后这个标志可以加上一些自己定义的 参数。就像下面这样,创建一个@interface的注解,然后就可以使用这个注解了,加在我们需要装饰的方法上,但是什么功能也没有 @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented public @interface LogAnnotation { String value() default""; } 原文链接:https://blog.csdn.net/qq_21187515/article/details/109643130 一、 java自定义注解的定义、描述 注解是一种能被添加到java源代码中的元数据,方法、类、参数和包都可以用注解来修饰。注解可以看作是一种特殊的标记,可以用在方法、类、参数 和包上,程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。 1. 创建一个注解的基本元素 修饰符: 访问修饰符必须为public,不写默认为pubic; 关键字: 关键字为@interface; 注解名称: 注解名称为自定义注解的名称,例如上面的XinLinLog 就是注解名称 注解类型元素: 注解类型元素是注解中内容,根据需要标志参数,例如上面的注解的value; 2. 元注解(@Target、@Retention、@Inherited、@Documented) 我们上面的创建的注解 LogAnnotation 上面还有几个注解(@Target、@Retention、@Inherited、@Documented),这四个注解就是元注解, 元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的元注解类型,它们被用来提供对其它 注解类型作标志操作(可以理解为最小的注解,基础注解) @Target:用于描述注解的使用范围,该注解可以使用在什么地方 ElementType.TYPE 应用于类、接口(包括注解类型)、枚举 ElementType.FIELD 应用于属性(包括枚举中的常量) ElementType.METHOD 应用于方法 ElementType.PARAMETER 应用于方法的形参 ElementType.CONSTRUCTOR 应用于构造函数 ElementType.LOCAL_VARIABLE 应用于局部变量 ElementType.ANNOTATION_TYPE 应用于注解类型 ElementType.PACKAGE 应用于包 备注:例如@Target(ElementType.METHOD),标志的注解使用在方法上,但是我们在这个注解标志在类上,就会报错 @Retention:表明该注解的生命周期 RetentionPolicy.SOURCE 编译时被丢弃,不包含在类文件中 RetentionPolicy.CLASS JVM加载时被丢弃,包含在类文件中,默认值 RetentionPolicy.RUNTIME 由JVM 加载,包含在类文件中,在运行时可以被获取到 @Inherited:是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类。 @Documented:表明该注解标记的元素可以被Javadoc 或类似的工具文档化 二、自定义注解的使用 创建一个注解,仅仅是一个标志,装饰类、方法、属性的,并没有功能,要实现功能,需要通过拦截器、AOP切面这些地方获取注解标志,然后实现功能。 java自定义注解使用范围: 通过注解实现一些重复的逻辑,就像封装了的一个方法,可以用在一些权限校验、字段校验、字段属性注入、保存日志、缓存 SpringMVC之自定义注解 1.1 Java注解简介 注解(Annotation)是Java语言的一种元数据(metadata)机制,它提供了一种在代码中添加额外信息的方式。 注解可以用于标记代码的特定元素,如类、方法、字段、参数等,以便在编译时、运行时或者通过工具进行处理。 注解相关类都包含在java.lang.annotation包中。 1.2 为什么要用注解 使用注解的主要目的是为了提供更多的元数据信息,以便在编译时或运行时进行处理。注解可以用于以下几个方面: 编译时处理:注解可以在编译时被编译器识别和处理。通过在代码中添加注解,我们可以告诉编译器执行特定的操作,如生成额外的代码、进行静态检查、生成文档等。 例如,JUnit框架中的@Test注解用于标记测试方法,在编译时会被JUnit运行器识别并执行相应的测试。 运行时处理:注解可以在程序运行时通过反射机制被读取和处理。通过读取注解,我们可以获取代码中的元数据信息,并根据注解的定义执行相应的逻辑。例如,Spring框架中的@Autowired注解用于自动注入依赖,通过读取注解,Spring容器可以自动将依赖注入到相应的对象中。 工具处理:注解可以被工具读取和处理,以实现特定的功能。例如,JavaDoc工具可以读取代码中的注解,并生成相应的文档。其他工具,如代码生成器、静态分析工具等,也可以利用注解来实现特定的功能。 使用注解的好处包括: 提供更多的元数据信息:注解可以为代码添加额外的元数据信息,使得代码更加丰富和可读。通过注解,我们可以标记代码的特定含义、行为和规则,提高代码的可理解性和可维护性。 简化开发流程:注解可以简化开发流程,减少重复的代码和配置。通过使用注解,我们可以自动化一些常见的任务,如依赖注入、配置解析、路由映射等,提高开发效率。 增强代码的可靠性和安全性:注解可以用于进行静态检查和约束,以确保代码的正确性和安全性。通过在代码中添加注解,我们可以在编译时或运行时进行验证,避免一些常见的错误和问题。 总之,注解是一种强大的元数据机制,它可以为代码添加额外的信息和行为,提高代码的可读性、可维护性和可靠性。通过使用注解,我们可以简化开发流程,提高开发效率,并实现更灵活和可扩展的功能。 注解的分类 1.3.1 JDK基本注解 JDK基本注解是Java开发工具包(JDK)中提供的一组预定义注解,用于标记代码的特定元素。这些注解包括: @Override:用于标记方法覆盖(重写)父类中的方法。当一个方法使用了该注解时,编译器会检查该方法是否正确地覆盖了父类中的方法。 @Deprecated:用于标记已过时的方法、类或字段。当一个方法或类被标记为过时时,编译器会发出警告,提醒开发者不再推荐使用该方法或类。 @SuppressWarnings:用于抑制编译器产生的警告信息。可以在方法、类或整个代码块上使用该注解,以忽略特定类型的警告。 JDK元注解 JDK元注解是用于注解其他注解的注解,它们提供了更多的元数据和行为来定义注解的行为。JDK中提供了四个元注解: @Retention:用于指定注解的生命周期。可以设置为SOURCE(只在源代码中可见)、CLASS(在编译时可见)或RUNTIME(在运行时可见)。 @Target:用于指定注解可以应用的目标元素类型。可以设置为TYPE(类、接口、枚举)、METHOD(方法)、FIELD(字段)等。 @Documented:用于指定注解是否包含在Java文档中。如果一个注解被@Documented注解修饰,那么它的信息将包含在生成的文档中。 @Inherited:用于指定注解是否可以被继承。如果一个注解被@Inherited注解修饰,那么它的子类将自动继承该注解(不常用)。 @Target:指定被修饰的Annotation可以放置的位置(被修饰的目标) @Target(ElementType.TYPE) //接口、类 @Target(ElementType.FIELD) //属性 @Target(ElementType.METHOD) //方法 @Target(ElementType.PARAMETER) //方法参数 @Target(ElementType.CONSTRUCTOR) //构造函数 @Target(ElementType.LOCAL_VARIABLE) //局部变量 @Target(ElementType.ANNOTATION_TYPE) //注解 @Target(ElementType.PACKAGE) //包 注:可以指定多个位置,例如: @Target({ElementType.METHOD, ElementType.TYPE}),也就是此注解可以在方法和类上面使用 自定义注解 自定义注解是开发者根据自己的需求创建的注解。通过自定义注解,开发者可以为代码添加特定的元数据信息,并定义相应的处理逻辑。自定义注解的创建步骤包括: 使用@interface关键字定义一个注解类型。 在注解中定义需要的元素,可以包括基本类型、枚举类型、Class类型、注解类型等。 使用元注解对注解进行修饰,例如@Retention、@Target等,以定义注解的生命周期和使用范围。 在代码中使用自定义注解,可以通过反射获取注解的元素值,并根据注解的定义进行相应的处理。 要创建一个自定义注解,你需要使用Java的注解机制。下面是一个简单的示例,展示了如何创建一个自定义注解 自定义注解三种使用案例 注解(根据Annotation是否包含成员变量,可以把Annotation分为两类): 标记注解(Marker Annotation):这种注解没有成员变量,它们仅通过自身的存在与否来提供信息。 元数据注解(Meta Annotation):这种注解包含成员变量,它们可以接受和提供更多的元数据信息。 元数据注解除了标记代码的特定元素外,还可以携带额外的数据或参数。通过元数据注解,我们可以为代码添加更多的元数据信息, 以便在编译时、运行时或者通过工具进行处理。元数据注解可以用于配置、约束、验证等方面。 https://blog.csdn.net/Ying_hao_kun/article/details/132913385 https://blog.csdn.net/cold___play/article/details/135993224 https://blog.csdn.net/qq_50652600/article/details/122791156 https://blog.csdn.net/CHIKA2333/article/details/131957914 https://www.cnblogs.com/huangdh/p/17775887.html https://www.bilibili.com/video/BV1S142197x7?p=160&vd_source=d8f7e5dda729d7e4b57f643d667d5436 https://blog.csdn.net/ql_gome/article/details/135753192 https://blog.csdn.net/qq_50652600/article/details/122791156 https://cloud.tencent.com/developer/article/1809444 https://blog.csdn.net/zgl_cyy/article/details/112796251 https://zhuanlan.zhihu.com/p/321341045 https://www.jb51.net/program/315875pzt.htm https://blog.csdn.net/Ying_hao_kun/article/details/132913385 https://www.cnblogs.com/lovexiao/p/17866864.html https://www.bilibili.com/video/BV1xx411o7qK/?p=5&vd_source=d8f7e5dda729d7e4b57f643d667d5436