Java注解解析(三)——解析自定义注解

深入解析Java自定义注解:从原理到实战应用 Java注解是JDK 5.0引入的新特性,它可以用于为代码中的类、方法、变量等元素添加描述信息。注解不会直接影响代码的运行逻辑,但能被编译器、开发工具或运行时环境识别并利用。例如,常见的@Override注解用于标记方法是否重写父类方法,编译器会检查该方法是否符合重写规则;注解表示方法已过时,在使用时编译器会给出警告提示。Java内置了一些常用注解,除了上述提到的,还有(抑制编译器警告)、(标记函数式接口)等。而自定义注解则允许开发者根据实际业务需求,创建满足特定功能的注解类型。使用@interface。 阅读详情

在上一篇文章中我们简单的说了怎样自定义注解。那么我们自定义的注解到底有什么用呢?绝不可能只是一个标记吧,是可以解析出来的吧。

接下来就模仿数据库映射写个例子。

下面来说说如何解析自定义注解:

解析自定义注解

首先我们来自定义一个注解Table也就是数据库里面的表:
@Target({ElementType.TYPE})  
@Retention(RetentionPolicy.RUNTIME)  
public @interface Table {  
  public String value();  
}  

可以看到这个自定义的注解的作用域是类或接口,而且是一个运行时注解。
有一个String类型的注解成员,当只有一个注解成员的时候,该注解成员名称必须为value。

现在已经有了表名,那么接下来就写关于数据库字段的注解。

@Target({ElementType.FIELD})  
@Retention(RetentionPolicy.RUNTIME)  
public @interface Column {  
    String value();  
}
可以看到这个注解的作用域是:ElementType.FIELD也就是字段
是一个运行时注解,同样也有一个注解成员。

下面就开始写数据库的具体字段:

就简单写几个字段~~
@Table("student")  
public class Student {  
  
    @Column("num")  
    private int stuNum;  
    @Column("name")  
    private String stuName;  
    @Column("age")  
    private String stuAge;
	public int getStuNum() {
		return stuNum;
	}
	public void setStuNum(int stuNum) {
		this.stuNum = stuNum;
	}
	public String getStuName() {
		return stuName;
	}
	public void setStuName(String stuName) {
		this.stuName = stuName;
	}
	public String getStuAge() {
		return stuAge;
	}
	public void setStuAge(String stuAge) {
		this.stuAge = stuAge;
	}  
}  
在类的最上面写着@Table("student")  表明了这是一个表,而且表名就叫做student。下面有三个变量每个上面都有@Column的注解,表明这是一个表的字段,具体字段名就看
@Column(“”)括号里面的字符串了。
好了这些都写好我们就开始解析它们。

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;


public class Test {  
  
      
    public static void main(String[] args) {  
          
        Student s1 = new Student();  
        s1.setStuNum(20); 
          
        Student s2 = new Student();  
        s2.setStuAge(18); 
        s2.setStuName("gougou");  
          
       
        try {
			resolve(s1);
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
//        resolve(s2);
     
    
    }  
  @SuppressWarnings("unchecked")
private static  void resolve(Student stu) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
	  Class c=stu.getClass();
	  boolean isExist=c.isAnnotationPresent(Table.class);//判断c类是否被Table注解标注
	  if(!isExist){
		  return;
	  }
	  Table table=(Table) c.getAnnotation(Table.class);//获取注解table
	  String tableName=table.value();//获取注解的值,也就是这个表的名称
	  System.out.println("该数据表名:"+tableName);
	  Field[] fields=c.getDeclaredFields();
	 // 遍历所有字段
	  for (Field field : fields) {
		  //判断字段是否被Column注解标注
		if(field.isAnnotationPresent(Column.class)){
		Column column=	field.getAnnotation(Column.class);
		String columnName=column.value();//字段名
		String fieldName=field.getName();//变量名称,也就是我们刚才在Student定义的变量名称
		//根据我们的getter与setter的命名习惯一般是这样的:getStuNum,所以我们根据这个规则来生成getter的方法名
		String methodName="get"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);
		 Method getMethod =c.getMethod(methodName);  
		 Object  fieldValue = getMethod.invoke(stu);  
		System.out.println("字段名:"+columnName);
		System.out.println("变量名称:"+fieldName);
		System.out.println(columnName+"   "+fieldValue);//最后输出字段名与相应的值
		}
	}
  }

}

最后上一张图:





通过CN3口直接控制台达伺服电机A2-M(二) 既然可以通过RS485与伺服驱动器进行通讯,那么就肯定可以控制转速 首先,需要了解下 ‘控制模式及控制命令输入源设定’ 依据以上资料,速度控制模式有两种,S和SZ模式,分别对应模式选择中的02和04,对P1-01的地址0102进行写地址操作即可实现,一开始我使用了S模式,但是这个模式在寸动模式下会自动运转,不符合我控制的要求,后面改用SZ模式,就可以实现零速度。 使用串口工具发送命令:“01 06 01 02 00 04 28 35”即可以实现设置,设置完成后可以手动在伺服驱动器的按键面板上进行确 阅读详情

相关推荐

三轴云台稳定控制算法优化实战:从PID到模糊自适应

本文深入探讨了三轴云台稳定控制算法的优化实践,从经典PID控制到模糊自适应算法的进阶应用。通过实战案例和代码示例,详细解析了PID调参技巧、模糊控制实现及多传感器数据融合方法,帮助工程师在复杂环境下提升云台抗干扰能力和响应速度,特别适用于无人机航拍等场景。

green的博客 908

Java进阶——注解(三):注解的应用场景

注解:结合反射等技术做框架。

lyx200154的博客 443

毕设别再硬肝了:我用 GPT + Codex 做项目、写论文,效率直接起飞

这个也是神器。你项目做完之后,最怕的是老师一问就懵。这时候你直接把你的项目发给它,让它模拟老师提问。这是我的毕业设计题目和项目简介,请你站在答辩老师角度,提出20个高频问题,并给出简洁好背的回答。要求:问题尽量贴近计算机专业本科毕业答辩。为什么选这个题目?技术选型为什么这样定?你的创新点是什么?系统难点是什么?数据库怎么设计的?你的模型为什么选这个?如果继续优化,下一步怎么做?这个对答辩真的帮助很大。说实话,如果没有 GPT + Codex,

m0_74100417的博客 1846

SpringBoot自定义注解属性支持占位符${}

环境:SpringBoot2.3.8.RELEASE + JDK1.8 本文教你如何在SpringBoot环境下使得自定义的注解能够使用${xxx}表达式。 相关依赖 <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjrt</artifactId> </dependency> <dependency> <groupId&

asoklove的专栏 4100

vfsglobal预约系统登录问题全解析(by quqi99)

本文全面解析VFS Global预约系统登录常见问题,包括IP限制、验证码验证失败及账号自动删除等。提供详细的解决方案,如DNS配置、浏览器设置及邮箱选择建议,帮助用户顺利完成签证预约。特别针对中国用户遇到的IP限制问题,给出了实用技巧。

gamma的博客 1340

从原理到实践:详解双目散斑结构光的生成与优化

本文深入解析了双目散斑结构光的生成原理与优化实践,详细介绍了散斑结构光的抗干扰性、空间编码技术及其在三维视觉中的应用。通过对比不同生成方法和技术路线,提供了参数调优指南和工程实现细节,帮助开发者掌握高效、精准的散斑生成技术。

weixin_42521856的博客 591

Java 注解完全解析

无论是做Java后台或者Android开发,我们经常使用注解,最常用的莫过于@Override,很多流程的框架都用到了注解这个功能机制,例如Java后台开发中常用的框架Spring、MyBatis等,Android的Retrofit,Butterknife等,都是注解框架。有关注解也常常在面试中被问到,但我们了解注解的本质是什么?有哪些类别?如何自定义及使用?其中工作原理是什么?本文将做全面介绍。 一、注解的定义 关于注解首先引入官方文档的一句话:Java 注解(Annotation)用于为 Java

siutony的专栏 2760

03.Linux下目录动态扩容,以分配home的部分空间给root为例

本篇文章将介绍Linux下分配home目录的部分空间给root目录。大致思路:卸载home,解除其磁盘容量占用->扩容root,增加其磁盘空间->重建恢复home操作演示环境为CentOS系统,其他操作系统例如openEuler也可作为参考。01.Linux下目录扩容,以增加root目录的磁盘容量分配为例操作系统版本如下名称版本CentOS7.6+

ChennyWJS的博客 2337

Java注解详解

Java Annotation是JDK5.0引入的一种注释机制。 第1部分 Annotation架构 从中,我们可以看出: (01) 1个Annotation 和 1个RetentionPolicy关联。 可以理解为:每1个Annotation对象,都会有唯一的RetentionPolicy属性。 (02) 1个Annotation 和 1~n个Element...

GSON的博客 935

22h2版本的win10安装Docker Desktop时页面空白

摘要:Windows10 22H2系统重装Docker时出现安装界面卡死问题,通过管理员CMD执行静默安装命令解决。命令指定了WSL-2后端及多个自定义数据存储路径(安装目录、Hyper-V数据、Windows容器数据、WSL数据),安装需等待几分钟。最终验证安装成功。

猿小白的博客 654

Unity音游开发全指南:模板与免费资源高效构建节奏游戏

**粒子特效** | [Universal VFX](https://assetstore.unity.com/packages/vfx/particles/universal-vfx-159182) | 免费视觉特效 || **UI素材** | [Game UI Pack](https://assetstore.unity.com/packages/2d/gui/game-ui-pack-86908) | 现代风格UI元素 |**音游开发的黄金法则**:完美的节奏游戏是音乐与游戏的和谐统一。

Loving_enjoy的博客 727

java基础-注解定义和解析

java自定义注解的定义和使用,常用元注解,注解的解析。

weixin_50369190的博客 3641

DeepSeek 赋能智慧消防:以 AI 之力筑牢城市安全 “防火墙”

在数字化浪潮下,智慧消防系统亟需先进技术提升效能。DeepSeek 凭借 Transformer 架构与混合专家架构等核心技术,具备强大的多模态数据处理与智能决策能力,且支持本地化部署,保障数据安全。其在智慧消防领域的应用成效显著,从实现火灾风险动态感知与早期精准预警,到优化智能接警调度、设备健康管理,再到辅助应急指挥与疏散,有效降低火灾风险与事故损失。未来,DeepSeek 有望在智慧消防领域持续拓展,同时也需应对技术、数据等多方面挑战。

邓邓子的博客 1690

java 解析自定义注解_Java注解解析(三)——解析自定义注解

在上一篇文章中我们简单的说了怎样自定义注解。那么我们自定义的注解到底有什么用呢?绝不可能只是一个标记吧,是可以解析出来的吧。接下来就模仿数据库映射写个例子。下面来说说如何解析自定义注解:解析自定义注解首先我们来自定义一个注解Table也就是数据库里面的表:@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)public @in...

weixin_42161497的博客 311

假人有限元模型

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

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

java自定义注解学习(三)_注解解析及应用

上篇文章已经介绍了注解的基本构成信息。这篇文章,主要介绍注解的解析。毕竟你只声明了注解,是没有用的。需要进行解析。主要就是利用反射机制在运行时进行查看和利用这些信息 常用方法汇总 在Class、Field、Method、Constructor中都有如下方法: //获取所有的注解 public Annotation[] getAnnotations() //获取所有本元素上直接声明的注解...

qq_40222661的博客 115

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

java自定义注解实例_java自定义注解实例

让例子说明一切!类一:元注解,用于规定约束注解生命周期、行为等属性package com.xujie.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Inherited;import java.lang.anno...

weixin_35755640的博客 287

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Java注解

Java注解(Annotation),本质是一种元数据(描述数据的数据),它不直接影响程序的执行逻辑,而是对程序代码进行“标记”,告诉编译器、虚拟机或框架“这段代码是什么、该怎么处理”。举个通俗的例子:注解就像我们给文件贴的“标签”——给文件贴“重要”标签,不是改变文件内容,而是告诉我们“这个文件需要重点关注”;给Java方法贴@Override标签,也不是改变方法逻辑,而是告诉编译器“这个方法是重写了父类的方法,请检查语法是否正确”。注解的核心作用: 1. 标记代码:如@Override。

2401_88060344的博客 384

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万+

Java 注解解析获取及自定义

从源码解析如何获取注解信息,以及如何自定义注解。

glb168的博客 2406

Java自定义注解及个性化扫描注解

自定义注解 自定义注解三步骤 1、定义注解——相当于定义标记 2、标记注解——把标记打到需要标识的代码中 3、解析注解——在编译期或运行期解析注解,并进行特殊操作 一、定义注解 1.1、代码Demo import java.lang.annotation.*; @Target({ElementType.METHOD, ElementType.TYPE}) @Retention...

琅琊之榜 7941

Java关于注解的使用、如何自定义注解、如何通过元注解解析注解

注解属性,其实本质上是抽象方法。但是我们按照属性来理解容易理解,因为到时候使用注解的时候,需要用=为其赋值。public @interface 注解名{XXXXXXX定义属性:增强注解的作用数据类型 属性名():此属性没有默认值,需要在使用注解的时候为其赋值。数据类型 属性名() default 值:此属性有默认值,如果有需要,还可以二次赋值。注解中能定义8种基本类型:String类型、class类型、枚举类型、注解类型、以及以上类型的一维数组。//品牌//车零件//价格//数量。

weixin_45797022的博客 1532

【Java 注解】自定义注解 ( 注解解析 )

一、定义注解、 二、使用注解、 三、解析注解、 四、通过注解对象获取注解属性的原理、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2186

Java注解以及自定义注解

Java注解以及自定义注解

YIYIYI 1968

自定义注解及注解的解析

一、注解的概念 1、注解是JDK1.5开始的概念 2、注解相当于一种标记,是类的组成部分,可以给类携带一些额外的信息。但是去掉注解,该类依然是一个完整的类。 3、注解是给编译器或JVM看的,编译器或JVM可以根据注解来完成对应的功能。 二、自定义注解 2.1、定义格式 public @interface 注解名{ } 如:定义一个名为Student的注解 public @interface Stu...

Anna4的博客 1377

Java 自定义注解以及注解解析器

参考博客 http://www.cnblogs.com/huajiezh/p/5263849.html http://www.cnblogs.com/peida/archive/2013/04/26/3038503.html注解目前非常的流行,很多主流框架都支持注解,而且自己编写代码的时候也会尽量的去用注解,一时方便,而是代码更加简洁。 注解的语法比较简单,除了@符号的使用之外,它基本与Java固

小白鼠丶 4468
上一篇: Java注解解析(二)
下一篇: Android:使用SparseArray代替HashMap优化性能
javy_codercoder
博客等级 码龄11年 52粉丝 73原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值