自定义注解实现--简单理解版

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

一、背景知识
XML方案的配置可以说让人眼花缭乱,如网站开发时用到的web.xml,Mybatis的配置xml,Spring的Beans.xml,常常是满满的一大页,配置和排错都很不容易。但是从JDK5.0版本开始引入的Annotation(注解)就可以帮助程序开发人员摆脱这种繁重的配置,同时使元数据和想要配置的类捆绑在一起,一定程度上减轻了错误的发生。(ps:注解就是元数据,即一种描述数据的数据,也可以理解为注解就是源代码的元数据,它定义了一种标准的描述元数据的方式,使用较方便)
本人在学习注解的时候,是先学会注解的使用,发现对于注解还是不太了解,于是开始通过网上的资料学习自定义注解的实现。
首先,在自定义注解之前,我们需要了解注解的常见类型和元注解(非常重要,负责注解其他注解),常见类型有3种,Override(表示将父类的方法重写–阶段是SOURCE)、SuppressWarnings(在程序前面加上可以在javac编译中去除警告–阶段是SOURCE)、Deprecated(带有标记的包,方法,字段说明其过时,但是仍可以使用—-阶段是SOURCE)。
元注解主要有Target(用于描述注解的使用范围)、Retention(用于描述注解的生命周期)、Documented(描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员)和Inherited(阐述了某个被标注的类型是被继承的)。详情看下图:
这里写图片描述

主要是Target和Retention两个元注解比较重要,一个表示适用范围,如方法,属性,变量等等,另一个就是决定注解在哪个时期起作用,是编码时期,还是编译时期,还是执行时期。

最后在了解一下自定义注解的相关内容,就可以动手实现了。请看下图
这里写图片描述

二、代码实现
1.自定义的注解Car_color

package tes.annotation;
import static java.lang.annotation.ElementType.CONSTRUCTOR;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.TYPE;

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

@Target(ElementType.FIELD)  //表示这个注解的只适用于属性,也可以写多个({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@Retention(RetentionPolicy.RUNTIME) //表示注解只在执行期起作用
public @interface Car_color {
    String color() default "白色";  //color方法其实是声明了一个配置参数   
                                   //返回值String就是参数的类型,只能是基本类型
                                   //这里用default默认参数是“白色”
}

2.对象类Car

package tes.annotation;

public class Car {
    @Car_color(color="黑色") //使用自定义注解,这里也可以自己定义color的值
    private String color;

}

3.测试类(Java里专门的注解信息处理流程,主要是利用反射机制,可以自动实现注解,而我们自定义的注解想要使用,就必须自定义一个注解流程才能使用,不然就会失去作用,相当于一个注释)

package tes.annotation;

import java.lang.reflect.Field;

public class Test {
    public static void main(String[] args) throws ClassNotFoundException {
        Class cls=Class.forName("tes.annotation.Car");  //获取类对象
        Field[] field=cls.getDeclaredFields();          //获取类的属性数组
        for(Field f:field){                             //循环属性
            if(f.isAnnotationPresent(Car_color.class)){ //获取属性的注解,并判断是否是Car_color.class注解
                Car_color car=f.getAnnotation(Car_color.class);     //获取Car_color注解对象
                System.out.println("汽车颜色:"+car.color());            //输出注解的color配置参数
            }
        }
    }
}

4.运行结果
这里写图片描述

哈哈,有点懒惰,就只写了一个注解,希望能对你有所帮助!!!

Ubuntu终端AI编程助手配置:Claude Code接入DeepSeek模型全攻略 在软件开发领域,AI编程助手正成为提升开发效率的重要工具。其核心原理是通过大语言模型理解自然语言指令,生成、解释或调试代码。这类工具的技术价值在于将AI能力无缝集成到开发工作流中,减少上下文切换,实现更流畅的人机协作。常见的应用场景包括代码生成、错误调试、代码重构和技术问答等。本文聚焦于在Ubuntu系统中,将流行的终端AI助手Claude Code的后端模型从原版Claude替换为DeepSeek。通过配置环境变量实现API端点和模型的映射,这一过程涉及Node.js环境管理、npm包安装和关键环境变量设 阅读详情

相关推荐

Win32逆向必备:X32dbg中窗口句柄查看与消息断点的高级用法

本文深入探讨了X32dbg在Win32逆向工程中的高级应用,重点解析窗口句柄查看与消息断点的实战技巧。通过MFC程序逆向案例,详细介绍了如何利用窗口句柄层次结构、条件断点设置及消息映射表定位等技术,快速捕获关键业务逻辑,提升逆向分析效率。

nginx7reverse的博客 1017

JAVA【注解】 自定义注解

注解(也被称为元数据 )为我们在代码中添加信息提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据。注解的语法比较简单,除了@符号的使用之外,它基本与Java固有的语法一致。Java SE5内置了三种,定义在java.lang中的注解: 2.2 元注解 Java目前只内置了四种元注解。元注解专职负责注解其他的注解:·编写注解处理器解析注解注解 反射 四、反射 4.1 反射的概念 使用反射机制可以动态获取当前class的信息 比如方法的信息、注解信息、方法的参数、属性等;Class类 代表

舒克日记的博客 1871

两相变频交错PFC实战:从论文理论到PSIM仿真的完整避坑指南

本文详细解析了两相变频交错PFC技术从理论到PSIM仿真的完整实现过程,特别针对CRM模式下的BOOST PFC设计挑战提供实用解决方案。涵盖周期值比较法与RS触发器法的对比实施、PSIM仿真中的过零处理与收敛性优化等核心问题,并给出硬件实现的进阶建议,助力工程师高效完成高功率密度PFC设计。

weixin_30632089的博客 422

自定义事务注解

自定义事务注解 大纲: 1.如何自定义注解 2.如何封装一个事务注解 步骤:1.spring.xml 开启注解 2.定义注解接口 3.写事务类 4.写切面类 4.写切面类的步骤 1.先通过反射拿到代理对象的方法代理对象的信息 2.通过方法获取到这个方法是否加入了注解 (JpcTc jpcTc = objMethod.getDeclaredAnnotation(JpcTc.clas...

weixin_40591414的博客 731

SAP 财务BAPI_ACC_DOCUMENT_POST批导的税务tax

最近遇到了关于SAP财务凭证批导要bapi:BAPI_ACC_DOCUMENT_POST增加税的功能要求,查阅了一众文献发现都不尽如人意,所以想着自己写一个趟过的雷吧。 一般前台sap的凭证是有自动计算税码的勾选框的,但是bapi却并没有这个字段。 实际操作过程中1.可以定义一个税额的结构,参考bapiactx09 2.在会计分录上传如果需要增加税码的时候,譬如总账gl,需要对应tax_code 3.通过CALCULATE_TAX_FROM_GROSSAMOUNT 计算出税额和acct_k...

qq_35640448的博客 3187

PaddleOCR在医疗票据识别中的实战:从部署到业务字段提取

本文详细介绍了PaddleOCR在医疗票据识别中的实战应用,重点阐述了其离线部署方案与PP-OCRv3模型选型优势。针对医疗票据敏感数据不出本地的合规要求,文章提供了从环境搭建、模型配置到核心字段提取策略的完整流程,并分享了性能优化与系统集成的实践经验,有效解决了医疗票据自动化录入的难题。

weixin_29271053的博客 236

Spring自定义事务注解

定义注解@MyTransactional@Target({没有添加自定义事务注解前,转账会出现问题。扣除了Tom账户的钱,但是Jerry的钱并没有增加,数据不一致。添加了自定义注解【@MyTransactional】后,不会出现上述问题,保证了数据的一致性。注意:Spring的事务,本质也是通过AOP实现的。

m0_68226879的博客 513

AD | Altium Designer(原理图设计、电路仿真、PCB绘图)汉化版

Altium Designer(原理图设计、电路仿真、PCB绘图)

Qt历险记,专注Qt技术,三年医疗设备研发经验,1年机器视觉研发经验,半年柔性传感研发经验。 4169

Spring自定义注解实现事务

事务、事务失效、自定义注解

weixin_47541976的博客 507

Proxmox VE(PVE)与UPS联动配置:实现智能断电保护方案

本文详细介绍了为Proxmox VE (PVE)服务器配置UPS智能断电保护的完整方案。通过安装和配置apcupsd软件,实现PVE与UPS的联动,可在市电中断、电池电量不足时自动触发安全关机流程,有效保护虚拟机数据与服务连续性。文章涵盖了硬件选择、软件配置、策略设定及实战测试指南,并扩展了网络共享UPS的高级应用。

python9snake的博客 509

PCL CSF布料模拟算法【2026最新版】

CSF布料模拟地面滤波算法的PCL实现,博客长期更新,本文最近更新时间为:2026年10月26日。

点云侠的博客 3917

springboot 一个自定义注解直接搞定多线程事务

本文是使用了两个注解共同作用实现的,主线程当做协调者,各子线程作为参与者/*** 多线程事务注解: 主事务*///子线程数量/*** 多线程事务注解: 子事务*/两个注解都是用在方法上的,须配合@Transactional(rollbackFor = Exception.class)一起使用@MainTransaction注解。

huang714的专栏 859

ETAS工具导入DBC生成Com协议栈

ETAS工具导入DBC主要也是生成arxml用的,ETAS推荐使用Cobra导入,本文介绍导入过程及注意事项不管是导入DBC还是arxml,本质上都是为了生成对应的com协议栈,目的是为了减少重复的工作量,所以,前期定义好收发的矩阵很重要,一般导入一次之后,后面就可以按变更点手动更改了。

赞的博客 1712

Java实现自定义注解

前言      上一篇文章介绍了注解的一些基本知识,这次来介绍下如何实现自定义注解及注解如何使用。 正文      注解是一种能被添加到java源代码中的元数据,方法、类、参数和包都可以用注解来修饰。注解可以看作是一种特殊的标记,可以用在方法、类、参数和包上,程序在编译或者运行时可以检测到这些标记而进行一些特殊的处理。...

全力奔跑,梦在彼岸 10万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

VC中sqlite的使用

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

如何实现自定义注解

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

qq_22331931的博客 1万+

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

理解java注解的实现原理

JAVA 注解的基本原理(重点) https://www.cnblogs.com/yangming1996/p/9295168.html 从以下4个方面来系统的学习一下java注解 什么是注解 注解的用途 注解使用演示 注解的实现原理 1,什么是注解 注解也叫元数据,例如我们常见的@Override和@Deprecated,注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解 一般常用的注解可以分为三类: 一类是Java自带的标准注解,包

qq_43842093的博客 1万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java注解详解与自定义注解的实现

       注解(Annotation),也叫元数据。一种代码级别的说明。它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。 1、java注解的优缺点       注解本质上通过反射来实现的,我们都知道,反射是一种程序的自省机制,其实反射是破坏封装的一种方式,反射的效率很低的,对...

hj12312的博客 1万+

注解的概念及自定义Java注解并实现注解给字段赋值

一,注解基本概念 从JDK1.5开始,Java提供了对元数据(MetaData)的支持,也就是注解(Annotation) 注解,其实就是代码中的特殊标记,这些特殊标记可以在类加载,编译,运行时被读取,并执行相应的处理 使用注解最大的作用就是在不改变程序原逻辑的情况下添加补充信息 注解(Annotation)可以像修饰符一样来使用.可用于修饰包,类,构造器,方法.成员变量,参数,局部变量的声明,这些信息被保存在Annotation的"name=value"对中 注解(Annotation)能被用来为程序元素

LwinnerG的博客 8636

Java 注解 —— 注解的理解、注解的使用与自定义注解

Java 注解 —— 注解的理解、注解的使用与自定义注解 参考网址: 《秒懂,Java 注解 (Annotation)你可以这样学》 《Java注解基本原理》 《注解Annotation实现原理与自定义注解例子》 《框架开发之Java注解的妙用》 一. 注解基本介绍 1.1 什么是注解? 什么是注解?严谨的来说,注解提供了一种安全的类似注释的机制,用来将任何的信息或...

琦小虾的代码世界 1万+

java注解简单理解

注解让代码变得简洁,开发效率更高

devops 2066

注解的理解,使用与自定义注解

自定义注解类编写的规则:注解类型定义为 @interface,所有的注解会自动继承 java.lang.Annotation 这一接口,而且不能再去继承其他的类或接口;参数成员只能用 public 或 default 两个关键字修饰;参数成员只能用基本类型:byte, short, char, int, long, float, double, boolean,以及 String, Enum, Class, Annotations 等数据类型,以及这些类型的数组;

weixin_45901415的博客 1424

【Java注解系列】内置注解与AOP实现自定义注解

1、深入理解Java注解类型(@Annotation)_zejian_的博客-优快云博客_java注解 2、java之aop使用及自定义注解 - 沦陷 - 博客园 3、SpringAOP中的JointPoint和ProceedingJoinPoint使用详解(附带详细示例)_如何在5年薪百万的博客-优快云博客_proceedingjoinpoint有什么用 ...

qq_35789269的博客 4490

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

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

AmbroseLe 2531

自定义注解简单实现类似Feign的功能

自定义注解简单实现类似Feign的功能 最近在玩spring源码,上文 spring自定义组件扫描,模仿@MapperScan 利用spring的beanFactoryProcessor进行扫描注册,最后结合jdbc完成简单封装。 feign的源码怎么样子我没看过,只知道基于http调用(本文暂未集成配置中心) 本文内容深度依赖于spring。 涉及主要知识点: spring的BeanPo...

weixin_43328357的博客 1561

注解简单理解

注解在spring框架中经常使用。 java从1.5开始支持注解。 注解的理解: 注解是什么? 从JDK5开始,Java增加对元数据的支持,也就是注解,注解与注释是有一定区别的,可以把注解理解为代码里的特殊标记,这些标记可以在编译,类加载,运行时被读取,并执行相应的处理。通过注解开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。 注解怎么用? @XXXXX 定义...

10年IT大头兵 468
上一篇: eclipse添加Pydev插件的过程
下一篇: 优快云如何找到我的收藏及关系-个人空间
猿人换羽
博客等级 码龄10年 72粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值