Java编程基础——编写注解处理器(二)

Java注解与自定义注解处理器 所以本文就注解与自定义的注解处理器来学习注解。 阅读详情

一、编程注解处理器。

在JavaSE5中扩展了反射机制的API,这样可以有效读取定义的注解。例子如下:读取PasswordUtils类中方法的注解。

package org.wangkeqing.annotation;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class UseCaseTracker {

	public static void main(String[] args) {
		List<Integer> useCases = new ArrayList<Integer>();
		Collections.addAll(useCases, 47,48,49,50,51);
		trackUseCases(useCases,PasswordUtils.class);

	}
	
	//使用反射机制读取Annotation注解
	public static void trackUseCases(List<Integer> useCases,Class<?> clz){
		for(Method m:clz.getDeclaredMethods()){
		  //获取UseCase的annotation
		  UseCase uc = m.getAnnotation(UseCase.class);
		  if(uc!=null){
			System.out.println("found UseCase:"+uc.id()+"----"+uc.description());
		//找到Annotation后,把useCases中相应的id数据删掉(剩下没有annotation的id值)
			useCases.remove(new Integer(uc.id()));
		  }
		}
		//遍历useCases中剩下的id数据
		for(int i:useCases){
			System.out.println("Warning :Missing use case-"+i);
		}
	}
}

程序中使用了反射机制中的两个方法:getAnnotation()和getDeclaredMethods()方法。他们都属于AnnotatedElemment接口,Class,Method,Field都实现了该接口。getAnnotation()返回注解对象,如果该方法没有注解,返回null值。通过调用id()和description()方法可以从返回的UseCase注解对象中获取到id和description的值。
其中encriptPassword方法在注解的时候没有description的值,它的值就是默认值。


二、注解元素类型

在上例中,标签@UseCase由UseCase.java定义,其中包含一个int类型id,String类型的description。注解元素可以使用的类型如下。

(1)、所有的基本类型(boolean,byte,char,short,int,long,float,double)

(2)、String

(3)、Class

(4)、enum

(5)、Annotation

(6)、以上类型的数组

注意:不能使用其他类型,否则编译器会报错。


Java注解处理器(Annotation Processor)详解 Java注解处理器是一个强大的工具,可以在编译时生成代码、验证API使用和提供元数据。通过与Google Auto Service结合,可以简化处理器的注册过程。注解处理器的主要优势在于它们可以在编译时捕获错误并生成高效的代码,避免运行时反射带来的性能开销。在实际应用中,注解处理器被广泛用于依赖注入框架、ORM映射、路由生成和序列化等场景,极大地提高了开发效率并减少了样板代码。 阅读详情

相关推荐

Java中注解处理器使用错误的排查指南

显式声明处理器:避免依赖IDE或构建工具的隐式发现机制。版本严格管理:处理器版本需与JDK、构建工具版本严格匹配。生成代码隔离:将生成代码放在单独的包(如)中,避免命名冲突。调试优先:通过-A参数启用处理器调试日志,快速定位问题。性能优化启用增量编译(避免在处理器中进行耗时操作(如网络请求)注解处理器错误的核心在于配置正确性、版本兼容性和环境适配性。通过显式声明处理器、启用调试日志和优化构建配置,开发者可显著降低注解处理错误率。注解处理器是编译时工具,需确保其生成的代码能被正确编译和加载。

shejizuopin的博客 1237

java注解使用_关于java注解的基础用法

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

weixin_31043555的博客 107

Java注解处理器:从入门到实战

从Java 6开始,注解处理器API的引入使得我们能够在编译阶段对注解进行处理。通过本文的介绍,我们了解了Java注解处理器的基本概念、编写方法以及核心API的使用。注解处理器在编译阶段对代码进行处理,不仅可以增强代码的安全性,还可以动态生成代码或资源文件,为开发带来极大的便利。将处理器打包为JAR文件,并将其加入到客户端项目的类路径中。注解处理器是一种特殊的Java类,它在编译阶段被触发,用于处理代码中的注解。代码验证:根据注解中的信息,对代码进行验证,发出自定义的错误或警告,从而增强编译时类型安全。

2501_90323865的博客 844

获取类的方法上的所有方法上的注解

最近在加深注解这块的理解,很多框架都使用到了注解。 直接上代码: 注解的实现类 Anno.java package com.robot.test; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.Retention

zhuhai__yizhi的专栏 6350

利用AI辅助工具Codex在30分钟内高效生成发明专利说明书草案

Codex 是什么?简单说,它是 OpenAI 推出的一个高级 AI 工作平台,最初定位是软件开发辅助工具,但现在它的能力边界已经远远超出了写代码。根据 OpenAI 官方信息,每周有超过 500 万人使用 Codex,其中 40% 的新用户是非开发者,包括分析师、营销人员、研究人员等。这意味着 Codex 正在从一个程序员专属工具,演变为一个面向广泛知识工作者的生产力中枢。 那么,它和我们今天要谈的“写发明专利”有什么关系?核心在于 Codex 的“角色专属插件”和“上下文构建”能力。它不再只是根据零散的

weixin_29053067的博客 320

Dify + mem0插件实战:如何让AI记住你的饮食习惯(附完整代码)

本文通过Dify平台与mem0插件实战,详细演示了如何为AI助手构建长期记忆系统,使其能记住并理解用户的复杂饮食习惯(如过敏源、饮食偏好)。文章提供了完整的工作流配置与Python代码示例,帮助开发者实现跨会话的个性化饮食建议,解决AI对话中的“健忘”问题。

lg888的博客 1096

java注解之注解处理器

摘要  Java5中提供了apt工具来进行编译期的注解处理。apt是命令行工具,与之配套的是一套描述“程序在编译时刻的静态结构”的API:Mirror API(com.sun.mirror.*)。通过Mirror API可以获取到被注解的Java类型元素的信息,从而提供自定义的处理逻辑。具体的处理工具交给apt来处理。编写注解处理器的核心是两个类:注解处理器(com.sun.mirror.apt....

惜阳 3184

ENVI基于Landsat影像构建郑州市2000-2019年遥感生态指数RSEI

本文基于landsat5、landsat7、landsat8三种传感器的影像,使用ENVI软件构建郑州市2000-2019年遥感生态指数RSEI。内含ENVI详细操作、使用的公式以及构建结果。

Lexicopperfield的博客 1万+

Java注解处理器使用详解

文章转自:http://www.race604.com/annotation-processing/在这篇文章中,我将阐述怎样写一个注解处理器(Annotation Processor)。在这篇教程中,首先,我将向您解释什么是注解器,你可以利用这个强大的工具做什么以及不能做什么;然后,我将一步一步实现一个简单的注解器。一些基本概念在开始之前,我们首先申明一个非常重要的问题:我们并不讨论那些在运行时...

kyfxing的博客 1020

现控报告-- 分析倒立摆系统稳定性、能控性及能观性分析,设计PID控制方案(附matlab)

建立直线一级倒立摆系统的动力学模型,推导该系统的运动方程,求出直线一级倒立摆系统传递函数模型及空间状态方程模型。接着描述了PID控制系统设计原理及PID控制器各校正环节的作用,简要叙述了参数的整定方法。设计了直线一级倒立摆摆杆摆角及小车位置常规单回路控制器,通过Simulink仿真知道常规单回路控制器能控制摆杆摆角,不能控制小车位置。于是设计出了直线一级倒立摆双闭环控制器及基于倒立摆系统的状态空间方程控制器,利用软件进行仿真,仿真结果表明,常规双闭环控制方案和基于状态空间方程加控制方案均能对摆杆摆角及小车位

mengshenglo的博客 4万+

智能驾驶小白必看:MEB低速紧急制动系统的工作原理与传感器配置详解

本文深入解析了MEB低速紧急制动系统的工作原理与传感器配置。该系统作为智能驾驶的关键安全冗余,专为应对停车场、拥堵路段等复杂低速场景设计。文章详细拆解了其如何通过超声波雷达、环视摄像头等传感器融合感知环境,并基于碰撞时间(TTC)等模型进行风险评估与分级制动,最终实现主动防碰撞,是智能驾驶技术实用化的重要体现。

c2d3e4f的博客 1132

扫描某个包下所有的类,输出所有使用了特定注解的类的注解值

扫描某个包下所有的类,输出所有使用了特定注解的类的注解值

myCoffeeTime 2万+

华为OD机试双机位C卷-流浪地球(Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷【流浪地球】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,并提供在线OJ模拟做题。华为OD机试真题【流浪地球】。

qq_45776114的博客 3141

Java注解(三):自定义Java编译时注解处理器

1. 絮絮叨叨 要么是注解跟我有仇,要么是公司配发的笔记本跟我有仇,要么是因为心急吃不了热豆腐 痛定思痛:从头开始,新建一个Java项目,实现一个超级简单的注解@Hello 在 process()方法中简单打印 getSupportedSourceVersion()方法返回的结果 在此,记录一下如何定义一个简单的Java编译时注解处理器 1.1 AbstractProcessor 自定义Java编译时注解处理器,一般都是通过继承AbstractProcessor实现的 AbstractProcesso

lucyLee的博客 9060

【SpringBoot 3.x 第56节】再见 Feign?原生 HTTP 接口强势上位,这才是微服务调用的正确姿势!

🏆本文收录于《滚雪球学SpringBoot 3》,专门攻坚指数提升,本年度国内最系统+最专业+最详细(永久更新)。    本专栏致力打造最硬核 SpringBoot3 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。 如果想快速定位学习,可以看这篇【SpringBoot3教程导航帖】,你想学习的都被收集在内,快速投入学习!!两不误。    若还想学习更多,可直接前往《滚雪球学SpringBoot(全版本合集)》,涵盖SpringBoot所有版本教学文章

**My Coding Family** 1017

RK3588开发笔记-Buildroot编译Qt5WebEngine-5.15.10

Rockchip RK3588是一款强大的多核处理器,广泛应用于边缘计算、人工智能、嵌入式系统等领域。为了在RK3588上运行自定义的Linux系统,并使用Qt5WebEngine进行Web内容渲染,Buildroot是一个非常合适的工具。本文将详细介绍如何使用Buildroot编译并配置Qt5WebEngine-5.15.10。Qt5WebEngine是Qt框架中的一个模块,它提供了一个功能强大的Web浏览器引擎,允许开发者在Qt应用程序中嵌入和显示现代网页内容。

flypig has a dream! 1159

JAVA基础面试题:Java中的元编程与注解处理器

Victor:元编程(Metaprogramming)是指编写能够操作其他程序(或自身)作为数据的程序。在Java中,元编程的核心思想是通过反射(Reflection)、动态代理(Dynamic Proxy)和注解处理器(Annotation Processor)等技术,实现对程序结构和行为的动态修改或扩展。Java中的元编程和注解处理器是高级开发中不可或缺的工具,它们通过反射、动态代理和编译时处理等技术,为开发者提供了极大的灵活性和扩展能力。

qq_61302385的博客 894

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Java注解处理器

Java注解处理器 2015/03/03 | 分类:基础技术|0 条评论| 标签:注解 分享到:1 译文出处:race604.com原文出处:Hannes Dorfmann Java中的注解(Annotation)是一个很神奇的东西,特别现在有很多Android库都是使用注解的方式来实现的。一直想详细了解一下其中的原理。很有幸阅读到一篇详细解...

avclk66666的专栏 1023

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【JVM知识】插入式注解处理器实现java编程规范检测

插入式注解处理器实现java编程规范检测,实现插件有findbug、lombok、mapstruct等

dylan的博客 927

Java核心:注解处理器

首先我们需要定义一个注解,用来标注后续要生成toString方法的类。@ToString的逻辑很简单,这里我们只把它定义为一个标记注解。定义@ToString注解之后,我们就可以把它用在想要自动生成toString方法的类上,比如我们有一个Point类的定义,我们希望为Point类生成toString方法,可以在Point上添加@ToString注解@ToStringreturn x;return y;

你若盛开,清风自来 1364

一文搞定Java注解和注解处理器

文章目录前言注解接口注解元素使用注解元注解什么是反射Class获取Class对象使用Class对象分析类获取字段使用Field获取构造函数使用Constructor获取方法使用Method获取注解获取修饰符使用Modifier其它使用Class对象获取资源反射与数组编译器APIToolJavaCompilerDocumentationToolCompilationTaskDocumentationTaskFileObjectJavaFileObjectSimpleJavaFileObjectForwardi

有术无道止于术,有道无术尚有可为。 5378

9.3注解处理器

Java注解处理器(AnnotationProcessor)是编译期处理注解的核心工具,允许开发者在编译时扫描和处理注解,生成额外的代码或资源,减少手动编写样板代码的工作量。其基本原理包括在编译期运行、处理源代码中的注解并生成新文件,且运行在独立的JVM进程中,不影响目标程序的运行时行为。核心组件包括Processor接口、AbstractProcessor基类以及Elements、Types、Filer等工具。开发步骤包括定义注解、实现处理器、注册处理器和编译时触发。通过一个简单的Getter/Sette

chxii的专栏 1663

Java注解处理器 - 五分钟快速入门

基本概念Java 注解(Annotation)分为两类:编译时(Compile time)处理的注解和在运行时(Runtime)通过反射机制运行处理的注解。本文将重点介绍在编译时(Compile time)处理的注解,关于在运行时(Runtime)通过反射机制运行处理的注解,比较简单这里不做介绍大家可以自行找资料学习。注解处理器(Annotation Processor)是javac的一个工具,它用

Ricky 5435

Java 注解与注解处理器

Java 注解与注解处理器 从 JDK 5 开始,Java 增加了注解,注解是代码里面的特殊标记,这些标记可以在编译、类加载、运行时被读取,并执行一些相应的处理。通过使用注解,开发人员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充的信息。代码分析工具、开发工具和部署工具可以通过这些补充信息进行验证、处理或者进行部署。 注解 注解可以分为标准注解和元注解。 标准注解是 JDK 自带的注解。元注...

okclouderx的博客 6231

Java 注解与注解处理器基础总结与实操步骤分析

Java 注解与注解处理器的核心知识点。

记录移动开发相关的知识 993

JAVA 插入注解处理器

JDK1.5后,Java语言提供了对注解(Annotation)的支持 JDK1.6中提供一组插件式注解处理器的标准API,可以实现API自定义注解处理器,干涉编译器的行为。 在这里,注解处理器可以看作编译器的插件,在编译期间对注解进行处理,可以对语法树进行读取、修改、添加任意元素;但如果有注解处理器修改了语法树,编译器将返回解析及填充符号表的过程,重新处理,直到没有注解处理器...

diyu7773的博客 824
上一篇: Java编程基础——注解Annotation(一)
下一篇: Java编程基础——Annotation注解(三)
spring_model
博客等级 码龄11年 36粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值