自定义注解

注解的实现原理及如何自定义注解 1.前言 在springmvc及springboot中,注解随处可见,我们几乎每天都在跟他打交道;那么如何自定义注解呢?自定义注解会不会更香呢 2.Java注解理解 Java 注解(Annotation)又称 Java 标注,是 JDK5.0 引入的一种注释机制。Java 语言中的类、方法、变量、参数和包等都可以被标注。和 Javadoc 不同,Java 标注可以通过反射获取标注内容。在编译器生成类文件时,标注可以被嵌入到字节码中。Java 虚拟机可以保留标注内容,在运行时可以获取到标注内容 。 当然 阅读详情

常识

注释:给程序员看的,帮助程序员理解程序的代码逻辑
注解:给程序看的,可以让程序根据有无注解而执行不同的代码逻辑

注解是从JDK1.5开始提出来的,可作为轻量化配置来使用,使用起来比xml配置文件更加轻便简单

自定义

定义注解和定义接口差不多使用@interface来定义,然后再使用元注解修饰
1. 下面是定义一个简单的注解first的例子

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@interface first {
	String value();
}

@first
class test{

}
  1. 元注解:javaapi提供的用来定义注解的注解,一共四个分别是:@Target@Retention@Document@Inherited
元注解功能解释
@Target控制自定义的注解可以修饰什么对象(没用此元注解修饰则默认所有对象都可以修饰)可以控制注解可以修饰类,属性还是方法构造方法等
@Retention控制自定义注解可以保留到什么阶段(源文件,编译,运行)注解没保留则不生效
@Document控制自定义注解能否被文档提取工具提取到文档中能否被javadoc命令提取
@Inherited控制自定义注解是否具有继承性当注解修饰父类时子类是否也被此注解修饰
@Target的参数作用
ElementType.ANNOTATION_TYPE开启修饰注解
ElementType.ANNOTATION_TYPE开启修饰构造方法
ElementType.TYPE开启修饰类 ,接口或enum
ElementType.FIELD开启修饰属性
ElementType.METHOD开启修饰方法
ElementType.PARAMETER开启修饰参数
ElementType.LOCAL_VARIABLE开启修饰局部变量
ElementType.PACKAGE开启修饰包

注意:只要将上面的参数写入@Target参数位置就是开启修饰各种对象的权限

@Retention 参数作用
RetentionPolicy.SOURCE只在源文件中保留,java文件编译后就不保留
RetentionPolicy.CLASS编译后保留,运行阶段不保留
RetentionPolicy.RUNTIME运行阶段保留
  1. 注解类中添加属性

注解类中定义属性类似于接口定义方法;

注解中所有的属性必须是public的,也可以不修饰默认为public

注解中的属性只能是八种基本数据类型String和class类型,其他注释类型及以上类型的一维数组

注解中声明属性需要在使用注解是为其赋值,赋值方式: @注解名(属性名=属性值)

使用

可是用反射注射来使用(必须使注解保留到运行阶段)

有关注解的反射方法:

方法作用
isAnnotationPresent(Class<? extends Annotation> annotationClass)判断是否包含指定类型的注解
getAnnotation(Class annotationClass)获取该元素的指定类型的注解
getAnnotation()获取此元素上存在的所有注解

使用案例:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

enum Sort{
	MATH,ENGLISH,CHINESE,ART
}

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@interface Course {
	Sort value() default Sort.MATH;
}

@Course(Sort.CHINESE)
class Student{
	
}

public class Temp{	
	public static void main(String[] args) {
		if(Student.class.isAnnotationPresent(Course.class)){
			switch(Student.class.getAnnotation(Course.class).value()){
				case MATH :
					System.out.println("此学生选的是"+Sort.MATH);
					break;
				case ENGLISH :
					System.out.println("此学生选的是"+Sort.ENGLISH);
					break;
				case CHINESE :
					System.out.println("此学生选的是"+Sort.CHINESE);
					break;
				case ART :
					System.out.println("此学生选的是"+Sort.ART);
					break;
			}			
		}else{
			System.out.println("Student类上没有注解");
		}
	}
}

运行结果:此学生选的是CHINESE

附:

  1. 自定义注解中可以使用default来设置默认值
  2. 当注解类中的属性名为value且只有这个属性时,在是此注解时可直接在括号中写上要赋的值
LVGL在STM32H743IIT6上的性能优化技巧:如何提升图形界面刷新速度 本文详细介绍了在STM32H743IIT6高性能MCU上优化LVGL图形界面刷新速度的实战技巧。通过利用芯片的DMA2D硬件加速模块替代低效的软件画点,将绘制缓冲区放入SDRAM并启用双缓冲机制,以及合理配置CPU缓存与MPU,有效解决了界面卡顿问题。文章还涵盖了LVGL引擎调优、内存架构优化等关键步骤,帮助开发者充分发挥STM32H743的硬件潜力,实现流畅的图形界面体验。 阅读详情

相关推荐

Apple 网页 SRP 登录系列文章(四):Hashcash 工作量证明与完整登录流程

本文是Apple SRP登录系列文章的收官之作,重点解析了Apple独有的Hashcash工作量证明机制并展示了完整的登录流程实现。文章详细介绍了Hashcash的安全目的、格式标准、计算核心算法及难度评估方法,特别提供了Python实现代码。同时还讲解了如何动态获取服务器Hashcash参数以及建立容错机制。最后呈现了完整的Apple SRP登录主函数架构,为开发者提供了从理论到实践的全面指导。全文通过代码示例和流程分析,系统性地阐述了Apple安全登录机制的技术细节。

Sayid_Des的专栏 630

抽象方法的使用以及注意事项

抽象方法:在void之前加入关键字abstract 同时抽象方法所在的类也应该是抽象类 在class之前加入abstract 1,应注意在定义方法时 不需要大括号写方法体例如 public abstract class animal{ public abstract void eat(); // 抽象方法定义完成; } 2,怎么使用抽象方法 抽象方法不能直接new对象来使用 而是使用继承的方...

weixin_43191154的博客 1284

数字孪生变电站如何制作?虚拟现实项目强荐广州华锐互动

变电站数字孪生系统可以为提高变电站设备与环境的实时感知能力、在线诊断设备健康状态、促进设备隐藏故障定位和维修效率的提高、实现设备全生命周期提供有力支撑。通过对设备状态的准确评估,可以延长设备的生命周期,实现资产增值。1、3D可视化:建立可视化平台,集中展示所有3D模型信息、数据信息、环境信息和人员信息,包括设备数字模型、建筑外形及内部、周边地形、人员动态、天气、时间等。4、智能监控:采用先进的AI摄像头,通过设备的图像识别,自动智能分析图像,准确分析设备状态、运行动态、外围控制情况。...

gzvrnew的博客 776

8.spring系列- java注解

问题 注解是干什么的? 一个注解可以使用多次吗?如何使用? @Inherited是做什么的? @Target中的TYPE_PARAMETER和TYPE_USER用在什么地方? 泛型中如何使用注解? 注解定义可以实现继承吗? spring对注解有哪些增强?@Aliasfor注解是干什么的? 什么是注解 代码中注释大家都熟悉吧,注释是给开发者看的,可以提升代码的可读性和可维护性,但是对于java编译器和虚拟机来说是没有意义的,编译之后的字节码文件中是没有注释信息的;而注解和注释有点类似,唯一的区别就是注释是

qq_32062699的博客 2665

智能车竞赛轮腿穿越组:GPS+IMU导航绕桩实战技巧(附避坑指南)

本文详细介绍了智能车竞赛轮腿穿越组中GPS+IMU导航绕桩的实战技巧,包括硬件选型、传感器标定、路径规划及多传感器数据融合策略。通过实际案例和避坑指南,帮助参赛队伍提升导航精度和稳定性,避免常见错误。特别强调IMU安装位置和标定对导航系统的重要性。

gin88的博客 584

《PCI Express体系结构导读1》-- PCI简介

请先阅读完一遍此书再来看文章哦,这样效率更高~

HoneyIC的博客 152

Java注解及自定义注解的使用

一.概念 Java 注解(Annotation)又称 Java 标注,是 JDK1.5 引入的一种注释机制。 简单总结一下来说就是:1.JDK1.5之后的新特性 2.说明程序的 二.作用分类 1.编译检查 2.编写文档(其中在命令盘中使用命令抽取内容,生成API文档) 3.代码分析(使用反射) 三.在JDK预定义的注解 @Override - 检查该方法是否是重写方法。如果发现其父类,或者是引用的接口中并没有该方法时,会报编译错误。 @Deprecated - 标记过时方法。如果使用该方

qq_46547993的博客 518

RK3568下GPIO模拟串口

在嵌入式开发中,硬件 UART 资源可能被其他外设占用。此时,通过 GPIO 模拟 UART(软串口)成为一种灵活的解决方案。本文基于 RK3568 平台,结合 Linux 内核模块,实现高精度软串口通信,并深入分析关键技术细节。可以看到已经接收到数据了,可以自己创建自定义的设备文件到/dev下,也可以按照串口设备的标准创建一个设备,后面有时间我写一篇和标准串口设备结合的gpio模拟串口文章。RK3568 GPIO 模拟串口(软串口)实现详解。将编译好的驱动放到板子上运行。再写个Makefile。

文石_2009的博客 364

自定义注解详细介绍

java自定义注解

wuyongde0922的专栏 4700

【原创】下载RealEstate10K数据集原始视频的方法

目前互联网上能搜到下载RealEstate10K数据集原始视频的方法都已经不能用了,这篇博客介绍一种目前可用的下载RealEstate10K数据集原始视频的方法,并给出自动化的脚本代码。

沉迷单车的追风少年 2463

手把手入门YOLO到改进优化教程 | 【P1基础篇】YOLOv8网络架构原理

本节先来学习基础知识,以YOLOv8进行讲解入门, 拿YOLOv8入手掌握YOLO的底层逻辑 ,也可以基于此来轻松学习后面更新的YOLO系列 (大部分YOLO版本的核心思想一致,更新是基于旧版本做结构升级、优化策略,学习成本会越来越低)。

嵌入式阿齐Archie 2万+

Java中的注解以及自定义注解

1、Annotation(注解) 概述 (1)、注解起到标识做用,比如Junit的@Test注解。 Junit会在运行时检查方法上是否存在此注解,如果存在,就通过反射来运行你的方法。注意标红的反射两个字,反射在注解里相当重要,写完你的自定义注解类后没啥用,必须要用反射才能让它动起来!所以需要对反射有了解,感兴趣的小可爱可以看下这篇:Java中的反射机制介绍 (2)、从 JDK 5.0 开...

曹举的个人博客 2万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java自定义注解

Java-Java自定义注解 文章目录Java-Java自定义注解前言1、简介2、元注解3、自定义注解3.1 自定义注解3.2 数据模型使用注解3.3 定义一个“注解解析器”3.4 运行的代码3.5 结果 前言 Java 骚操作之一:自定义注解 1、简介 注解是一种能被添加到java源代码中的元数据,方法、类、参数和包都可以用注解来修饰。注解可以看作是一种特殊的标记,可以用在方法、类、参数和包上,程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。 2、元注解 元注解的作用就是负责注解其他注解

weixin_45020244的博客 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

如何实现自定义注解

如何实现自定义注解   在我们实际开发过程中如果能合理的运用自定义注解,则会大大减少我们代码的开发量。那怎么才能实现自定义注解呢?废话不多说,直接上干货! 一、创建注解   这一步呢,我们可以理解成对应的实体类,我们要自定义注解,也需要这么一个东西,注解的名称,有哪些属性等等。 package org.disp.kingmouse.annotations; import java.lang.annotation.ElementType; import java.lang.annotation.Retent

qq_22331931的博客 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

自定义注解 及 解析自定义注解

目录 自定义注解需要注意 元注解 使用自定义注解 解析注解 自定义注解需要注意 1-使用@interface来定义注解 2-成员变量使用的是无参数、无异常的方式进行声明 例如 想要声明变量,正常方式是String name,而注解中需要String name();来定义成员变量 3-使用default来给成员变量设置默认值 4-成员变量的类型。可以是基本数据类型。还可以是String ,class ,annotation ,enumerate 5-如果注解中只有一个成员变量,...

AmbroseLe 2531

自定义注解实现@NotNull注解

先了解一下基本的自定义注解的时候,常用的注解含义 @Documented // 代表这个注解,可以被javadoc 处理的(加不加都行) @Retention(RetentionPolicy.RUNTIME) // RetentionPolicy 生命周期,一共有三个 // SOURCE 只留在源码,编译好后的代码是不有该注解的,该注解一旦编译就不存在了 ; // class 只停留在字节码,...

树欲静而风不止 1万+

注解,自定义注解和元注解

自定义注解就是自己做一个注解来使用value属性,如果只有一个value属性的情况下,使用value属性的时候可以省略value名称不写!!但是如果有多个属性, 且多个属性没有默认值,那么value名称是不能省略的。

CX的博客 1172

Java注解以及自定义注解

Java注解以及自定义注解

YIYIYI 1968

springboot 自定义注解

Annotation表示注解。是JDK1.5的新特性。注解的主要作用:对我们的程序进行标注。通过注解可以给类增加额外的信息。注解是给编译器或JVM看的,编译器或JVM可以根据注解来完成对应的功能。public @interface 注解名称 {public 属性类型 属性名();注解中的属性可以有默认值,格式为:数据类型 属性名() default 默认值;​属性类型可以是基本数据类型,String,Class,注解,枚举,以及上述类型的数组​。

weixin_68537303的博客 2371

注解之自定义注解实现

Java自定义注解一般使用场景为自定义注解+拦截器或者AOP,使用自定义注解来自己设计框架,使得代码看起来非常优雅。本文主要介绍使用自定义注解+AOP来实现。

Java__EE小白成长之路 3058

条件注解及自定义注解

目录结构:如何自定义注解?注解其实就是一种标记,可以在程序代码中的关键节点(类、方法、变量、参数、包)上打上这些标记,然后程序在编译时或运行时可以检测到这些标记从而执行一些特殊操作。因此可以得出自定义注解使用的基本流程:第一步,定义注解——相当于定义标记;第二步,配置注解——把标记打在需要用到的程序代码中;第三步,解析注解——在编译期或运行时检测到标记,并进行特殊操作。在底层实现上,所有定义的注解都会自动继承接口。

cxbtdd的博客 440

用自定义注解做点什么——自定义注解有什么用

用自定义注解做点什么 前言 你不一定听过注解,但你一定对@Override不陌生。 当我们重写父类方法的时候我们就看到了@Override。我们知道它表示父类方法被子类重写了。 现在告诉你,@Override就是一个注解。 也许你会疑惑注解是什么? 注解(annotation)是JDK5之后引进的新特性,是一种特殊的注释,之所以说它特殊是因为不同于普通注释(comment)能存在于源码,而且还能存在编译期跟运行期,会最终编译成一个.class文件,所以注解能有比普通注释更多的功能。 接下来,先入个门,然后

qq_43842093的博客 2525

Java自定义注解开发

一、JAVA注解 1、java注解的定义 Java注解是附加在代码中的一些元信息,用于一些工具在编译、 运行时进行解析和使用,起到说明、配置的功能。 注解相关类都包含在java.lang.annotation包中。 2、java注解的分类 2.1 JDK基本注解 2.1.1 @Override 重写 2.1.2 @Deprecated 已过时 2.1.3 @SuppressWarnings(value = ...

zxy15974062965的博客 7177

自定义注解的使用

自定义注解的使用 文章目录自定义注解的使用前言一、注解是什么?二、四个元注解三、自定义注解示例1.原生方式2.读入数据总结 前言 一、注解是什么? 注解也叫元数据,例如我们常见的@Override和@Deprecated,注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解 一般常用的注解可以分为三类: 一类是Java自带的标准注解,包括@Override(标明重写某个方法)、@Deprecated(标明某个类或方法过时)和@Suppres

weixin_41979002的博客 4506
上一篇: 理解ThreadLocal
下一篇: Spring中常用注解
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值