K:注解处理

Kubernetes Dashboard 部署、登录与卸载全指南:K8s 与 K3s 实践 Kubernetes 集群管理常依赖 kubectl 命令行,但面对大量资源时图形化面板能显著提升效率。Dashboard 作为官方 Web UI,通过 ServiceAccount 的 RBAC 权限与 API Server 交互,实现资源可视化与操作。其技术价值在于降低运维门槛、加速故障排查,适用于日常巡检、应用部署和权限管控等场景。在 K8s 与 K3s 环境中,部署方式、访问暴露和 Token 认证存在差异,需注意版本兼容与资源清理。本文详细拆解从部署到卸载的全流程,涵盖 K3s 特有配置、Toke 阅读详情

@转载自:http://www.cnblogs.com/peida/archive/2013/04/26/3038503.html

如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。使用注解的过程中,很重要的一部分就是创建并使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器。

注解处理器类库(java.lang.reflect.AnnotatedElement):

Java使用Annotation接口来代表程序元素前面的注解,该接口是所有Annotation类型的父接口。除此之外,Java在 java.lang.reflect 包下新增了AnnotatedElement接口,该接口代表程序中可以接受注解的程序元素,该接口主要有如下几个实现类:

Class:类定义
Constructor:构造器定义
Field:累的成员变量定义
Method:类的方法定义
Package:类的包定义

java.lang.reflect 包下主要包含一些实现反射功能的工具类,实际上,java.lang.reflect 包所有提供的反射API扩充了读取运行时Annotation信息的能力。当一个Annotation类型被定义为运行时的Annotation后,该注解才能是运行时可见(即该Annotation类型被@Retention(RetentionPolicy.RUNTIME)所注解),当class文件被装载时被保存在class文件中的Annotation才会被虚拟机读取。

java中通过反射的方式,获取对应class文件的注解的对象,是通过动态代理的方式进行实现的。
AnnotatedElement 接口是所有程序元素(Class、Method和Constructor)的父接口,所以程序通过反射获取了某个类的AnnotatedElement对象之后,程序就可以调用该对象的如下四个个方法来访问Annotation信息:

方法1:<T extends Annotation> T getAnnotation(Class<T> annotationClass): 返回该程序元素上存在的、指定类型的注解,如果该类型注解不存在,则返回null。
  方法2:Annotation[] getAnnotations():返回该程序元素上存在的所有注解。
  方法3:boolean isAnnotationPresent(Class<? extends Annotation> annotationClass):判断该程序元素上是否包含指定类型的注解,存在则返回true,否则返回false.
 方法4:Annotation[] getDeclaredAnnotations():返回直接存在于此元素上的所有注释。与此接口中的其他方法不同,该方法将忽略继承的注释。(如果没有注释直接存在于此元素上,则返回长度为零的一个数组。)该方法的调用者可以随意修改返回的数组;这不会对其他调用者返回的数组产生任何影响。

ps:方法2和方法4的区别在于,是否返回继承的注解(被@Inherited修饰的Annotation注解的元素,为可以被继承的注解元素)。

 

 

 

一个简单的注解处理器:  

/***********注解声明***************/

/**

 * 水果名称注解

 * @author peida

 *

 */

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface FruitName {

    String value() default "";

}

/**

 * 水果颜色注解

 * @author peida

 *

 */

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface FruitColor {

    /**

     * 颜色枚举

     * @author peida

     *

     */

    public enum Color{ BULE,RED,GREEN};

    

    /**

     * 颜色属性

     * @return

     */

    Color fruitColor() default Color.GREEN;

 

}

/**

 * 水果供应者注解

 * @author peida

 *

 */

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface FruitProvider {

    /**

     * 供应商编号

     * @return

     */

    public int id() default -1;

    

    /**

     * 供应商名称

     * @return

     */

    public String name() default "";

    

    /**

     * 供应商地址

     * @return

     */

    public String address() default "";

}

/***********注解使用***************/

public class Apple {

    

    @FruitName("Apple")

    private String appleName;

    

    @FruitColor(fruitColor=Color.RED)

    private String appleColor;

    

    @FruitProvider(id=1,name="陕西红富士集团",address="陕西省西安市延安路89号红富士大厦")

    private String appleProvider;

    

    public void setAppleColor(String appleColor) {

        this.appleColor = appleColor;

    }

    public String getAppleColor() {

        return appleColor;

    }

    

    public void setAppleName(String appleName) {

        this.appleName = appleName;

    }

    public String getAppleName() {

        return appleName;

    }

    

    public void setAppleProvider(String appleProvider) {

        this.appleProvider = appleProvider;

    }

    public String getAppleProvider() {

        return appleProvider;

    }

    

    public void displayName(){

        System.out.println("水果的名字是:苹果");

    }

}

/***********注解处理器***************/

public class FruitInfoUtil {

    public static void getFruitInfo(Class<?> clazz){

        

        String strFruitName=" 水果名称:";

        String strFruitColor=" 水果颜色:";

        String strFruitProvicer="供应商信息:";

        

        Field[] fields = clazz.getDeclaredFields();

        

        for(Field field :fields){

            if(field.isAnnotationPresent(FruitName.class)){

                FruitName fruitName = (FruitName) field.getAnnotation(FruitName.class);

                strFruitName=strFruitName+fruitName.value();

                System.out.println(strFruitName);

            }

            else if(field.isAnnotationPresent(FruitColor.class)){

                FruitColor fruitColor= (FruitColor) field.getAnnotation(FruitColor.class);

                strFruitColor=strFruitColor+fruitColor.fruitColor().toString();

                System.out.println(strFruitColor);

            }

            else if(field.isAnnotationPresent(FruitProvider.class)){

FruitProvider fruitProvider=(FruitProvider)field.getAnnotation(FruitProvider.class);

                strFruitProvicer=" 供应商编号:"+fruitProvider.id()+" 供应商名称:"+fruitProvider.name()+" 供应商地址:"+fruitProvider.address();

                System.out.println(strFruitProvicer);

            }

        }

    }

}

/***********输出结果***************/public class FruitRun {

 

    /**

     * @param args

     */

    public static void main(String[] args) {

        

        FruitInfoUtil.getFruitInfo(Apple.class);

        

    }

}

====================================

 水果名称:Apple

 水果颜色:RED

 供应商编号:1 供应商名称:陕西红富士集团 供应商地址:陕西省西安市延安路89号红富士大厦

Java注解的基础知识点(见下面导图)


 


请求处理、响应处理(请求映射,基本注解响应JSON、内容协商的一点笔记) cookie 和 session 的机制就是,session里面保存一个k-v的值,然后每个人都有一个jsessionid,这个jsessionid 会被保存在cookie里面,每次用户发送请求cookie 都会携带jsessionid ,如果把cookie 禁用掉,我们要获取session 的k获取v ,肯定要通过jsessionid来拿到这个session对象,但是jsession有保存在cookie 所以无法从session对象的v。在这个网页,老师笔记做的很完美真的很棒! 阅读详情

相关推荐

Springboot信息泄露以及heapdump的利用

努力是为了不平庸~安全有些时候是枯燥的,这一次,让我们先人一步,趣学渗透!

LiBai'S BLOG 3万+

Kotlin版注解处理器Annotation Processor

注解将元数据与其他代码元素相关联,允许我们将更多信息放入代码中。利用注解的一种方法是通过注解处理基于该信息生成新的源文件。

不学习傻了吧 1万+

在 Ansys CFX Pre 中配置 RGP 表的分步指南

掌握在 Ansys CFX Pre 中设置 RGP 表的技巧,以优化仿真精度和效率。

jkh920184196的博客 1671

Java 简单笔记——注解

注解一、概述二、三个基本的Annotation1.@Override2.@Deprecated 一、概述 从JDK5.0开始,Java新增加了对元数据(MetaData)的支持,也就是注解(Annotation) 注解其实就是代码中的特殊标记,这些特殊标记可以在类加载、编译、运行时被读取,并执行相应的处理。使用注解最大的作用就是在不改变原程序逻辑的情况下添加补充信息。 Annotation可以像修饰符一样被使用,可用于修饰包、类、构造器、方法、成员变量、参数、局部变量的声明,这些信息被保存在Annotat

Jiashun Hao的博客 1万+

PCB设计实践(三十二)PCB设计遇到大电流时的设计技巧

本文系统阐述10A至数百安培PCB设计的六大关键技术。载流能力优化强调铜厚选择(2-4oz)、线宽计算及并联结构;热管理提出散热孔阵列、铜基板嵌入等方案;布局策略包括功率分区和低阻抗路径设计;材料工艺推荐铝基板、陶瓷基板等高效解决方案;安全设计涵盖电气隔离与保护电路;验证环节需结合热仿真与实测。典型150A电机驱动板案例显示,通过4oz铝基板、散热孔阵列等设计,可实现温升≤45℃的稳定运行。核心在于铜厚线宽协同、主动散热及严格验证。

致力于硬件设计、人工智能知识及技术的分享,不断鞭策自己成长,共同进步! 4232

详细了解sklearn中的CountVectorizer

CountVectorizer 是 scikit-learn(一个流行的 Python 机器学习库)中的一个文本特征提取类,其核心功能是将一系列原始文本(如句子、文档)转换为基于词频(word count)的数值矩阵。它基于词袋模型(Bag of Words, BoW)思想,忽略文本的语法结构和词序,仅关注词汇在文本中出现的频率,从而将文本转化为机器可理解的数字形式。文本 1:"I love machine learning"

2302_76568160的博客 1119

如何让注解处理器支持 Kotlin?

友情提醒:如果没搞过注解处理器,这篇文章你看起来可能会比较迷。。什么是注解处理器话说,最近尝试了一下写了个注解处理器,也就是我们常见的 apt,在 Kotlin 当中有个...

Kotlin中文社区 1654

从PCIe 3.0到6.0:为什么“阻抗一致性”比“绝对值”更重要?聊聊连接器与板材的选型影响

本文探讨了PCIe从3.0到6.0演进过程中,阻抗一致性相比绝对值的重要性,分析了连接器与板材选型对高速信号完整性的影响。随着速率提升至64GT/s,系统级阻抗控制和验证成为关键,文章提供了选型指南、验证方法论及工程实践建议,帮助工程师应对高速设计挑战。

weixin_42556197的博客 384

使用KSP处理注解和生成Kotlin代码

ksp是Kotlin 符号处理工具,类似于kapt(apt),可用于开发轻量级编译器插件.也可以理解为注解处理和编译时代码生成工具(也能处理所有文件,不止被注解标记的) 既然有了kapt(apt),为什么还要有ksp? 速度比kapt更快,性能更好 对kotlin的支持更好 适用于Kotlin Multiplatform 可以直接生成kotlin代码文件(实际上可以生成任意类型的文件)

lt的博客 6528

从零开始:Doherty功率放大器的ADS仿真实践指南

本文详细介绍了Doherty功率放大器在ADS中的仿真设计流程,从基础原理到实际工程应用。通过负载调制技术,Doherty结构显著提高了功率放大器的效率,特别适合处理高峰均比信号。文章包含ADS环境搭建、对称与非对称设计、常见问题调试等实用内容,为射频工程师提供全面的实践指南。

weixin_29313547的博客 692

海洋CMS admin_notify.php 远程代码执行漏洞复现(CVE-2024-30565)

海洋CMS admin_notify.php 接口处存在远程代码执行漏洞,经过身份验证的远程攻击者可利用该漏洞执行任意代码,写入后门文件,进而控制整个web服务器。

0xSec 2719

KotlinPoet注解处理全指南:优雅生成Kotlin注解代码

KotlinPoet作为一款强大的Kotlin代码生成库,提供了全面而灵活的注解处理能力。本文将深入探讨如何使用KotlinPoet创建各种类型的注解,帮助开发者掌握这项重要技能。 ## 基础注解生成 最简单的注解使用场景是直接在函数或类上添加无参注解。KotlinPoet通过`addAnnotation()`方法实现这一功能: ```kotlin val testFunction = Fu...

gitblog_00663的博客 586

PDD psnl_verification anti_content 生成顺序与环境校验说明

K不是明文 URL,而是从当前href再派生出来的一小段摘要值。页面 URL 变,K会跟着变但K不是直接肉眼可读的 URL 字串可以把它理解成“URL 的短摘要字段”。这一步是最容易被误解的地方。它吃进去的是压缩后的中间串不是直接吃环境字段它内部还带有长度预算 / 字符映射 / 位置处理逻辑所以最终看到的环境字段 bytes协议头deflate 压缩自定义编码多层叠加后的结果。先把字段总包做再把压缩结果转成raw再拼fTail最后走做字符级输出因此,当前看到的协议字段流。

码王吴彦祖的博客 70

编译时注解

编译时注解 本篇文章用到的示例代码:AndroidAnnotationDemo 声明注解 通过@Retention(RetentionPolicy.CLASS)元注解确定我们注解是在编译的时候使用。 通过@Target确定我们注解是作用在什么上面的(变量、函数、类等)。 确定我们注解需要的参数。 编写注解处理器 注解处理器(Annotation Processor)是javac的一个工具,它用来在编译时扫描和处理注解(Annotation)。一个注解的注解处理器,以Java代码(或者编译过的字节码)作

lkl22的专栏 1772

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Android 组件化(二)注解与注解处理器、组件通讯

在上一篇文章中,我们完成了组件的创建、gradle统一管理、组件模式管理和切换,那么这一篇文章,我们需要做的就是组件之间的通讯了。

晨曦 2638

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Kotlin注解处理器(KAPT)作用

deepseek回答:我们正在回答关于Kotlin注解处理器(KAPT)作用的问题。用户的问题是用中文提出的,所以我们将用中文回答。首先,我们需要明确KAPT的作用。KAPT是Kotlin编译器的一个插件,用于支持Java的注解处理器在Kotlin代码上工作。由于Kotlin与Java在语法和编译过程上的差异,直接使用Java的注解处理器(如Dagger、ButterKnife等)处理Kotlin代码会遇到问题。KAPT通过生成存根(stub)文件,使得这些注解处理器能够正常工作。

yzpbright的博客 820

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Tomcat原理(2)——注解及注解的实现

(1)注解一般用于对程序的说明,就像注释一样,但是区别是注释是给人看的,但是注解是给程序看的。(2)让编译器进行编译检查的作用,比如下边这个@Override注解是重写的意思,子类重写了父类的方法,但是改动了方法名,所以报错。①:@interface是用来声明一个注解的,格式public @interface 注解名{定义内容}②:其中的每一方法实际上是声明了一个配置参数③:方法的名称就是参数的名称④:返回值类型就是参数的类型(返回值类型只能是基本数据类型,Class,String,enum)

2301_78566776的博客 977

java怎么给注解写入值_深入理解Java:注解

点击上方☝SpringForAll社区轻松关注!源http://dwz.date/m3k注解作用:每当你创建描述符性质的类或者接口时,一旦其中包含重复性的工作,就可以考虑使用注解来简化与自动化该过程。Java提供了四种元注解,专门负责新注解的创建工作。元注解 元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 ...

weixin_39633165的博客 669

AI如何解决Java增量注解处理禁用问题

增量注解处理(Incremental Annotation Processing)是Java编译器提供的一种优化技术,可以在编译过程中只重新处理发生变化的注解,而不是每次都全量处理所有注解。这对于大型项目来说,可以显著提高编译速度。为了演示增量处理的效果,我们需要创建一个简单的自定义注解处理器。这个处理器会扫描带有特定注解的类,并生成一些额外的代码。通过这次实践,我深刻体会到合理配置编译选项的重要性。增量注解处理虽然是个小功能,但对开发效率的提升非常明显。

BlackironLynx23的博客 644

Android-Sunflower中的注解处理器错误处理:编译时异常

Android-Sunflower是一个展示Android开发最佳实践的园艺应用,特别关注了从基于View的应用迁移到Jetpack Compose的过程。在Android开发中,注解处理器(Annotation Processor)是一种在编译时处理注解的工具,它可以生成额外的代码、进行语法检查或收集元数据,从而提高开发效率并减少运行时错误。 ## 二、编译时异常处理的关键类与方法 在项目中,...

gitblog_00223的博客 619

比较:手动处理警告 vs AI辅助@SuppressWarnings注解

这样的智能工具,不仅能一键完成代码处理,其内置的AI建议系统还能帮助开发者建立更规范的编码习惯。特别是部署到生产环境时,干净的警告处理能让日志监控更有效,这个优势在传统开发流程中往往被低估。:选取了30个真实项目中的Java文件,包含未检查转换(unchecked)、废弃方法(deprecation)等6类常见警告,共142处警告点。在Java开发中,@SuppressWarnings注解是抑制编译器警告的常用手段,但手动处理这些警告往往耗时且容易出错。的AI功能做了组对比实验,结果让人惊喜。

RubyLion28的博客 433

JavaEE初阶---properties类+反射+注解

1.配置文件properities 2.快速上手 3.常见方法 3.1读取配置文件 3.2获取k-v值 3.3修改k-v值 3.4unicode的说明 4.反射的引入 4.1传统写法 4.2反射的写法(初识) 4.3反射的介绍 4.4获得class类的方法 4.5所有类型的class对象 4.6类加载过程 4.7类初始化的过程 4.8类加载过程 4.9获取类的运行时结构 4.10动态创建对象 4.11获取成员属性方法 4.12性能测试 5.反射的应用 5.1操作泛型 5.2操作注解 6.注解annotati

大学成长道路上的探索经历与点滴思考,与君共勉,共筑成长。 1632

K:注解语法简介

@转载自:http://www.cnblogs.com/peida/archive/2013/04/24/3036689.html 注解分为元注解(meta-annotation)和自定义注解 元注解: 元注解:是负责注解(动词)其它注解(名词)的注解(名词)。 java5.0中有4个标准的注解。它用来对其它annotation类型作说明 1.@Target 2.@Retention

MyStringIsNotNull的博客 396

Jackson注解详解

随着fastjson的壮大,漏洞也越来越多,是时候考虑下Jackson了,下面对Jackson近30个注解逐个解释。 引入依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.2</version

寂寞的博客 2062

Java 基础——注解

本文记录了 Java 注解的相关知识。 本文章部分笔记整理来自https://www.bilibili.com/video/BV12k4y1q73J?p=333 1.注解概述 注解(Annotation),也称为元数据,它是一种代码级别的说明,是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。它可以声明在包、类、字段、方法、变量、参数等的前面,用来对它们进行说明。其作用大致可以分为以下三类: 编写文档 通过代码里

代码星辰的博客 781

InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer

本文系统梳理InnoDB内存结构中的ChangeBuffer、Adaptive Hash Index(AHI)与LogBuffer。ChangeBuffer缓存二级索引页不在内存时的变更,减少随机IO,仅在页加载时合并;聚簇索引修改立即执行,因数据本身不可延后。AHI基于高频等值查询自动构建哈希索引,加速定位,仅支持等值操作。LogBuffer为redo log内存缓冲,配合磁盘日志实现崩溃恢复。三者均服务于性能优化,其中ChangeBuffer与AHI共享BufferPool空间,而LogBuffer独立

bksczm的博客 296
上一篇: K:注解语法简介
下一篇: K:找寻数组中第n大的数组元素的值的三个算法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值