当前位置: 首页 > news >正文

Java高级-注解

注解

  • 1.介绍
  • 2.元注解
  • 3.注解的解析
  • 4.注解的应用场景

1.介绍

注解 Annotation

  • 就是Java代码里的特殊标记,作用是让其他程序根据注解信息来决定什么是执行该程序
  • 注解:注解可以在类上、构造器上、方法上、成员变量上、参数上等位置

自定义注解

/*** 自定义注解*/
public @interface MyTest1 {String aaa();boolean bbb() default true;String[] ccc();
}

特殊属性名:value

  • 如果注解中只有一个vlue属性,使用注解时,value名称可以不写
public @interface MyTest2 {String value(); // 特殊属性
}

注解的原理

  • 注解本质是一个接口,Java中所有的注解都是继承了Annotation接口的
  • @注解(…): 其实就是一个实现类对象,实现了该注解以及Annotation接口
    在这里插入图片描述

2.元注解

元注解

  • 指的是:修饰注解的注解
  • @Target 声明被修饰的注解在哪些位置使用
    • 类,成员变量,成员方法,成员参数,构造器,局部变量
  • @Retention 声明注解的保留周期
    • SOURCE 只作用在源码阶段,字节码文件中不存在
    • CLASS (默认值)保留到字节码文件阶段,运行阶段不存在
    • RUNTIME (开发常用)一直保留到运行解阶段

3.注解的解析

什么是注解的解析

  • 就是判断类上、方法上、成员变量上是否存在注解,并把注解里的内容给解析出来

如何解析注解

  • 指导思想:要解析谁上面的注解,就应该先拿到谁
  • 比如要解析类上面的注解,则应该先获取该类的Class对象,在通过Class对象解析其上面的注解
  • 比如要解析成员方法上的注解,则应该获取到该成员方法的Method对象,再通过Method对象解析其上面的注解
  • Class、Method、Field、Constructor 都实现了AnnotatedElement接口,都拥有解析注解的能力
    在这里插入图片描述

案例
先定义注解MyTest4

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest4 {String value();double aaa() default 100;String[] bbb();
}

在Demo类中定义test1方法,在类和方法上使用MyTest4的注解

@MyTest4(value = "蜘蛛精", aaa = 991, bbb = {"Java", "Python"})
public class Demo {@MyTest4(value = "孙悟空", aaa = 22, bbb = {"HTML", "CSS"})public void test1() {}
}

在AnnotationTest3测试类上,解析Demo类中的全部注解

public class AnnotationTest3 {@Testpublic void parseClass() throws NoSuchMethodException {// 1.先得到Class对象Class demoClass = Demo.class;// 2.解析类上的注解// 判断类上是否包含了某个注解if (demoClass.isAnnotationPresent(MyTest4.class)) {MyTest4 myTest4 = (MyTest4) demoClass.getDeclaredAnnotation(MyTest4.class);System.out.println(myTest4.value());System.out.println(myTest4.aaa());System.out.println(Arrays.toString(myTest4.bbb()));}// 3.解析方法上的注解Method test1 = demoClass.getDeclaredMethod("test1");if (test1.isAnnotationPresent(MyTest4.class)) {MyTest4 myTest4 = test1.getDeclaredAnnotation(MyTest4.class);System.out.println(myTest4.value());System.out.println(myTest4.aaa());System.out.println(Arrays.toString(myTest4.bbb()));}}
}

4.注解的应用场景

案例:模拟Junit框架
需求:定义若干个方法,只有加了MyTest注解,就会触发该方法执行
分析:

  1. 定义一个自定义注解MyTest,只能注解方法,存放范围是一直都在
  2. 定义若干个测试方法,部分方法加上@MyTest注解,部分方法不加
  3. 模拟Junit程序,可以触发加了@MyTest注解的方法执行
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyTest {
}public class AnnotationTest4 {public void test1() {System.out.println("==test1==");}@MyTestpublic void test2() {System.out.println("==test2==");}public void test3() {System.out.println("==test3==");}@MyTestpublic void test4() {System.out.println("==test4==");}public static void main(String[] args) throws Exception {// 1.获取对象Class annotationTest4Class = AnnotationTest4.class;// 2.获取所有方法Method[] methods = annotationTest4Class.getDeclaredMethods();// 3.遍历所有方法AnnotationTest4 annotationTest4 = new AnnotationTest4();for (Method method : methods) {// 4.判断如果存在MyTest注解if (method.isAnnotationPresent(MyTest.class)) {// 5.存在MyTest注解,执行该方法method.invoke(annotationTest4);}}}
}

相关文章:

Java高级-注解

注解 1.介绍2.元注解3.注解的解析4.注解的应用场景 1.介绍 注解 Annotation 就是Java代码里的特殊标记,作用是让其他程序根据注解信息来决定什么是执行该程序注解:注解可以在类上、构造器上、方法上、成员变量上、参数上等位置 自定义注解 /*** 自定…...

wabp.m 代码注释(便于算法快速理解)

算法效果: 波峰和起点检测效果: function [r,pk] = wabp(Araw, Offset,Scale, Fs) % r = wabp(Araw,Offset,Scale, Fs); % Input: Araw (125Hz sampled) waveform in wfdb-MIT format, % Offset, Scale % Araw = 血压波形 % Offset=偏移(信号减去或者加上偏移恢复成…...

数据库数据恢复-SQL SERVER数据库文件损坏的故障表现数据恢复方案

SQL SERVER数据库故障类型: SQL SERVER数据库MDF(NDF)或LDF损坏。 SQL SERVER数据库故障原因: 1、数据库正在操作过程中,机器突然断电。 2、人为误操作。 SQL SERVER数据库MDF(NDF)或LDF损坏的…...

flink中cpu消耗的大户-序列化和反序列化

背景 故事的起源来源于这样一篇关于序列化/反序列化优化的文章https://www.ververica.com/blog/a-journey-to-beating-flinks-sql-performance,当把传输的对象从String变成byte[]数组后,QPS直接提升了50% flink的网络数据交换优化 在flink中对于每个算子之间的跨…...

使用 K 均值聚类进行颜色分割

介绍 颜色分割是计算机视觉中使用的一种技术,用于根据颜色识别和区分图像中的不同对象或区域。聚类算法可以自动将相似的颜色分组在一起,而不需要为每种颜色指定阈值。当处理具有大范围颜色的图像时,或者当事先不知道确切的阈值时,这非常有用。 在本教程中,我们将探讨如何…...

Redis 哈希表操作实战(全)

目录 HSET 添加 HSETNX 添加 HMSET 批量添加 HGET 获取元素 HGETALL 获取所有 HMGET 批量查询 HEXISTS 判断是否存在 HINCRBY 增加整数 HINCRBYFLOAT 添加浮点数 HLEN 查Field数量 HKEYS 查所有Field HVALS 查所有Field值 HSCAN 迭代 HDEL 删除Field HSET 添加 …...

element table合并行或列 span-method

首先来看下官网上如何写的 <template><div><el-table:data"tableData":span-method"objectSpanMethod"borderstyle"width: 100%; margin-top: 20px"><el-table-columnprop"id"label"ID"width"18…...

【操作系统笔记】内存分配

内存对齐 问题&#xff1a;为什么需要内存对齐呢&#xff1f; 主要原因是为了兼容&#xff0c;为了让程序可以运行在不同的处理器中&#xff0c;有很多处理器在访问内存的时候&#xff0c;只能从特定的内存地址读取数据。换个说法就是处理器每次只能从内存取出特定个数字节的数…...

Web 整合

HTML span 行内元素 p 块级元素 br/ 强制换行 i em倾斜 b strong 加粗 u 下划线 mark 高亮 超链接 a &#xff1a;a href"链接地址" target"_blank" alt"可替文本" title"文字提示" tartget&#xff1a;_self 自己界面打开 _…...

hasOwnProperty 方法解析

一、含义&#xff1a; hasOwnProperty 是 JavaScript 中的一个内置方法&#xff0c;用于检查对象是否具有指定名称的属性。 具体来说&#xff0c;hasOwnProperty 方法用于判断一个对象是否拥有某个指定的属性&#xff0c;而不是继承自原型链的属性。它是一个布尔值方法&#…...

使用 nohup 运行 Python 脚本

简介&#xff1a;在数据科学、Web 开发或者其他需要长时间运行的任务中&#xff0c;我们经常需要让 Python 脚本在后台运行。尤其是在远程服务器上&#xff0c;可能因为网络不稳定或需要执行多个任务&#xff0c;我们不希望 Python 脚本因为终端关闭而被终止。这时&#xff0c;…...

Django:五、登录界面实现动态图片验证码

一、下载包 pip install pillow 二、代码 这是一个函数&#xff0c;无输入&#xff0c;返回两个值。一个值是图片&#xff0c;一个值是图片中的数字及字母。 需要注意&#xff1a;font_fileMonaco.ttf 是一个验证码字体文件&#xff0c;如有需要&#xff0c;可三连私信。 …...

GPT,GPT-2,GPT-3,InstructGPT的进化之路

ChatGPT 火遍圈内外&#xff0c;突然之间&#xff0c;好多人开始想要了解 NLP 这个领域&#xff0c;想知道 ChatGPT 到底是个什么&#xff1f;作为在这个行业奋斗5年的从业者&#xff0c;真的很开心让人们知道有一群人在干着这么样的一件事情。这也是我结合各位大佬的文章&…...

firefox_dev_linux下载安装配置(部分系统自带包请看结尾)

download 从 Firefox 的官方网站下载 Firefox Developer Edition 的 tar 文件 firefox_dev_linux_download # 终端快速下载 wget https://download.mozilla.org/?productfirefox-devedition-latest-ssl&oslinux64&langen-US彻底删除自带原版 # apt系 sudo apt --pu…...

vim缓存-交换文件

Catf1agCTF靶场 web swp 题目链接&#xff1a;http://catf1ag.cn/ 个人博客&#xff1a;https://sword-blogs.com/ 题目考点&#xff1a; vim在编辑文档的过程中如果异常退出&#xff0c;会产生缓存文件 vim 交换文件名 参考文章&#xff1a;vim手册 https://yianwillis.…...

Hive 优化建议与策略

目录 ​编辑 一、Hive优化总体思想 二、具体优化措施、策略 2.1 分析问题得手段 2.2 Hive的抓取策略 2.2.1 策略设置 2.2.2 策略对比效果 2.3 Hive本地模式 2.3.1 设置开启Hive本地模式 2.3.2 对比效果 2.3.2.1 开启前 2.3.2.2 开启后 2.4 Hive并行模式 2.5 Hive…...

CentOS 7.5 centos failed to load selinux policy 错误解决方法

这是个 selinux 使能导致的&#xff0c; 关闭即可 在进入到内核选中界面&#xff0c;选中要启动的内核&#xff0c; 按键盘 e 就会进入启动参数界面 进入启动参数界面如图&#xff0c;按上下键找到 UTF8 UTF8如图&#xff0c; 添加 selinux0 添加完成如图&#xff0c; 按 ctr…...

注入之SQLMAP(工具注入)

i sqlmap是一个自动化的SQL注入工具&#xff0c;其主要功能是扫描&#xff0c;发现并利用给定的URL和SQL注入漏洞&#xff0c;其广泛的功能和选项包括数据库指纹&#xff0c;枚举&#xff0c;数据库提权&#xff0c;访问目标文件系统&#xff0c;并在获取操作权限时执行任…...

Linux学习资源Index

由于Linux是支撑“云计算”的最核心、最底层、最重要的技术&#xff0c;持续提升自已的Linux水平是必须的&#xff0c;这里将不断更新的Linux学习索引。 书籍 书籍首页 - Documentation (rockylinux.org) WWW链接 提定发行版 RockyLinux Rocky Linux Download Rocky | R…...

什么是SVG(可缩放矢量图形)?它与普通图像格式有何不同?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 什么是SVG&#xff1f;⭐ 与普通图像格式的不同⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚…...

claw-gatekeeper:构建稳定智能的数据抓取守护服务

1. 项目概述&#xff1a;一个守护数据抓取流程的“看门人”在数据驱动的时代&#xff0c;无论是市场分析、舆情监控还是学术研究&#xff0c;自动化数据抓取&#xff08;爬虫&#xff09;都扮演着至关重要的角色。然而&#xff0c;任何稍有规模的抓取任务&#xff0c;都绕不开几…...

Docker部署Unifi控制器:从环境隔离到设备管理的完整实践

1. 项目概述&#xff1a;为什么选择Docker部署Unifi控制器&#xff1f;如果你和我一样&#xff0c;折腾过Ubiquiti&#xff08;优倍快&#xff09;的全家桶&#xff0c;大概率会对那个官方的硬件控制器——Cloud Key——又爱又恨。爱的是它开箱即用&#xff0c;把Unifi Network…...

Deep Lake:面向AI的统一数据湖仓,重塑深度学习数据管理

1. 从数据湖到AI数据库&#xff1a;为什么我们需要Deep Lake&#xff1f;如果你在搞AI项目&#xff0c;尤其是涉及大语言模型&#xff08;LLM&#xff09;或者计算机视觉&#xff0c;数据管理这块儿大概率让你头疼过。我自己的经验是&#xff0c;项目初期&#xff0c;数据量小&…...

Go语言轻量级Web框架Tapestry:高性能路由与中间件设计实战

1. 项目概述与核心价值最近在开源社区里&#xff0c;一个名为Tapestry的项目引起了我的注意。它来自开发者 NatsuFox&#xff0c;定位是一个“轻量级、高性能的 Web 框架”。说实话&#xff0c;现在各种语言的 Web 框架多如牛毛&#xff0c;从 Python 的 Flask、Django&#xf…...

RAGday13-day15

Day13&#xff1a;RAG 常见问题 & 调优实战检索不到内容原因&#xff1a;分块太小、关键词太偏、没做混合检索解决&#xff1a;换递归 / 父子分块、加上 ES 混合检索、做 Query 改写搜到内容多但答不对原因&#xff1a;检索杂、没重排、没上下文压缩解决&#xff1a;加 Rer…...

云原生监控一体化实践:从零部署mco实现指标、日志、追踪统一管理

1. 项目概述&#xff1a;一个面向现代容器化应用的开源监控解决方案最近在梳理团队的技术栈&#xff0c;发现随着微服务和Kubernetes的普及&#xff0c;传统的监控体系越来越力不从心。我们需要的不仅仅是对主机和进程的监控&#xff0c;更需要能深入理解容器、Pod、Service以及…...

2026中小企业OA软件排行榜TOP10(精简版)

2026年&#xff0c;中小企业数字化转型进入深水区&#xff0c;OA软件作为办公协同核心工具&#xff0c;是企业提升效率、规范流程、降本增效的关键支撑。随着SaaS模式普及、AI技术深度应用及信创政策落地&#xff0c;OA市场呈现“头部生态下沉、专业工具崛起、性价比为王”的格…...

基于 4SAPI 的 API 网关智能监控与故障诊断系统:MTTR 降低 90%,系统可用性提升至 99.99%

前言 在微服务架构盛行的今天&#xff0c;API 网关已经成为企业系统的核心入口&#xff0c;承担着流量路由、负载均衡、认证授权、限流熔断等关键功能。API 网关的稳定性直接决定了整个系统的可用性。但传统的 API 网关监控模式已经难以满足现代企业的需求&#xff1a; 告警风…...

GitHub加速终极指南:3步让你的下载速度提升10倍!

GitHub加速终极指南&#xff1a;3步让你的下载速度提升10倍&#xff01; 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 还在为Git…...

2026年5月PLC厂家:十大品牌专业评测解决工厂自动化选型难

摘要当制造业加速迈向智能化和柔性生产&#xff0c;PLC作为工业自动化的核心控制单元&#xff0c;其选型直接决定了产线效率、系统稳定性与长期运营成本。然而&#xff0c;面对众多品牌在技术路线、开放程度、生态兼容性上的显著分化&#xff0c;决策者常陷入“性能与成本如何平…...