百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 文章教程 > 正文

Java注解开发及原理(java注解工作原理)

yund56 2025-05-07 17:09 23 浏览

现在的Spring项目开发中,越来越多的都是由原先基于xml等配置开发,转成了基于注解开发。原先所有的内容都配置在.xml文件上,在Java文件和配置文件来回转换,是相当麻烦和耗时的。为了解决这些个问题,Spring引入了注解,通过”@注解名称”的方式,让注解与Java Bean紧密结合,既大大减少了配置文件的体积,又增加了Java Bean的可读性与内聚性。今天就分享下,Java注解开发的原理。

元注解

先来看下如何定义一个注解,Jdk1.5提供给开发者四种元注解:@Retention、@Inherited、@Documented、@Target,jdk1.8又补充的2种@Repeatable、@Native注解,目的是为了让开发者可以通过元注解自定义注解,使用注解开发。下面对元注解进行介绍。

@Retention

注解的保留位置(枚举RetentionPolicy),RetentionPolicy可选值:

  • SOURCE:注解仅存在于源码中,在class字节码文件中不包含
  • CLASS:默认的保留策略,注解在class字节码文件中存在,但运行时无法获得
  • RUNTIME:注解在class字节码文件中存在,在运行时可以通过反射获取到

如下图,可以看到使用RetentionPolicy.SOURCE仅存在源码中

如下图,使用RetentionPolicy.CLASS,class文件也存在,运行期无法获取


没有获取到注解

如下图,使用RetentionPolicy.RUNTIME,class文件也存在,运行期可以获取


@Inherited

声明子类可以继承此注解,如果一个类A使用此注解,则类A的子类也继承此注解

未使用@Inherited注解,子类无法基础注解

使用@Inherited注解后,子类则继承注解

@Documented

声明注解能够被javadoc等识别。

未使用@Documented注解,通过idea查看Javadoc,快捷键(ctrl + Q),发现注解并没有

使用@Documented注解,则doc文档中含有注解

@Target

用来声明注解范围(枚举ElementType),ElementType可选值:

  • TYPE:可以使用在接口、类、枚举、注解上
  • FIELD:可以使用在字段、枚举的常量中
  • METHOD:可以使用在方法上
  • PARAMETER:可以使用在方法参数上
  • CONSTRUCTOR:可以使用在构造函数中
  • LOCAL_VARIABLE:可以使用在局部变量中
  • ANNOTATION_TYPE:可以使用在注解中
  • PACKAGE:可以使用在package-info.java的包上
  • TYPE_PARAMETER:jdk1.8中新增,表示该注解能使用在自定义类型参数(参数的自定义类型可以是javaBean或者枚举等)的声明语句中
  • TYPE_USE:jdk1.8中新增,表示该注解能使用在使用类型的任意语句中

如下图,定义为ElementType.TYPE,则只能修饰类,不能修饰方法

@Repeatable

@Repeatable注解即可以在同一方法、属性、类等类型中多次使用同一个注解。此特性相当于对Java8之前的重复注解在编译层面的增强

没有使用@Repeatable注解的时候写法

使用@Repeatable注解的时候写法

@Native

该注解修饰成员变量,则表示这个变量可以被本地代码引用,常常被代码生成工具使用。对于 @Native 注解不常使用,了解即可

注解开发原理

注解的本质就是一个继承了 Annotation 接口的接口。我们可以去反编译任意一个注解类,可以通过字节码文件看到确实实现了Annotation接口

注解只不过是一种特殊的注释而已,如果没有解析它的代码,它可能连注释都不如。因此注解解析是非常重要的,而解析一个类或者方法的注解往往有两种形式,一种是编译期直接的扫描,一种是运行期反射。

编译器的扫描指的是编译器在对 java 代码编译字节码的过程中会检测到某个类或者方法被一些注解修饰,这时它就会对于这些注解进行某些处理。jdk中典型的就是注解 @Override,一旦编译器检测到某个方法被修饰了 @Override 注解,编译器就会检查当前方法的方法签名是否真正重写了父类的某个方法,也就是比较父类中是否具有一个同样的方法签名。这一种情况只适用于那些编译器已经熟知的注解类,比如 JDK 内置的几个注解,而你自定义的注解,编译器是不知道你这个注解的作用的,当然也不知道该如何处理,往往只是会根据该注解的作用范围来选择是否编译进字节码文件,仅此而已。

因此对于自定义接口,常常我们是通过运行期反射获取,代码如下

运行期间,可以获取注解,以及注解的属性

一旦当我们获取到相应的注解及属性,可以执行一些特有的逻辑,从而实现注解的真正的意义。

相关推荐

Excel表格带单位求和不用愁!2个高效小技巧,轻松搞定!

我是【桃大喵学习记】,欢迎大家关注哟~,每天为你分享职场办公软件使用技巧干货!——首发于微信号:桃大喵学习记最近有小伙伴私信提问了个问题:“Excel表格数据带单位,如何快速求和?”。相信很多新手小伙...

[office] Excel中Sumproduct函数的使用方法-

Excel中Sumproduct函数的使用方法-SUMPRODUCT和SUMIFS是Excel的两个最强大的函数,用于从表中返回过滤的数据。SUMPRODUCT功能更强大,但SUMIFS更快。您可以...

SUMPRODUCT函数:关于多条件求和,不仅仅是SUMIFS,我也行!

文章最后有彩蛋!好礼相送!SUMPRODUCT函数,作为excel函数公式中的常用功能之一,运用及其广泛。结合它能够处理数据的功能,函数哥将它称之为多条件求和的函数,你可能有疑问了。SUMIF和SUM...

Excel函数公式大全之利用MMULT函数计算两个数组矩阵的乘积

各位Excel天天学的小伙伴们大家好,欢迎收看Excel天天学出品的excel2019函数公式大全课程。今天我们依旧要学习的是Excel函数中的数学函数MMULT函数,计算两个数组的矩阵乘积。今天这个...

Excel中的这个“万能函数”你用过吗?一个顶四个,简单又实用

Hello,大家好,今天跟大家分享一个Excel中的最强大的求和函数,它就是——SUMPRODUCT函数,很多人都将其称之为“万能函数”,条件求和,条件计数等一些常用的功能他就能轻松搞定,逻辑也非常的...

根据关键字条件求和,SUMPRODUCT函数思路清晰!

1职场实例小伙伴们大家好,今天我们来讲解一个关于根据关键字进行条件求和的职场真实案例,这是公众号粉丝后台留言咨询的一个问题,下面我们来通过几组简单的数据还原一下真实的办公情景。如下图所示:A列为一列地...

Excel-万能PRODUCT函数

sumproduct除了可以计算乘积之和,还可以实现单条件求和(代替sumif),多条件求和(代替sumifs),单条件计数(代替countif),多条件计数(代替countifs)我总结了一个通用的...

Excel“王者”级求和函数SUMPRODUCT,职场必学!

我是【桃大喵学习记】,欢迎大家关注哟~,每天为你分享职场办公软件使用技巧干货!日常工作中我们经常需要对Excel数据求和、计数,今天就跟大家分享一下Excel“王者”级求和函数SUMPRODUCT,灵...

SUMPRODUCT函数满足“或”的要求,实现多条件求和!

1职场实例小伙伴们大家好,今天我们来继续讲解Excel使用中非常实用且强大的函数:SUMPRODUCT函数,上一次我们讲到了SUMPRODUCT函数实现类似SUMIFS函数多条件求和的功能。而今天我们...

整列数据相乘再相加sumproduct函数#excel技巧

今天分享一下像这种表格,我想求它的消费,也就是用它的数量去乘以单价去加上。下一个的数量乘以单价要加上,下一个数量乘以单价。如果小白会这样一步一步的去算,去单价去乘以数量,然后加上单价去乘以数量,一个一...

双向多条件求和,sumifs彻底不行了,但是sumproduct却能轻松搞定

今天我们来解决一个困扰很多Excel新手的问题,它就双向求和,所谓的双向,就是两个方向,如下图所示,我们想要根据【项目】与【费用类别】来实现动态求和效果。【项目】与【费用类别】在数据源中,一个是纵横的...

Excel函数之Sumproduct,7个经典用法,你真的都了解吗?

什么是sumproduct函数以及其基本操作原理?sumproduct函数主要用于对数组中的数值进行相乘后再求和,。该函数最多支持255个参数(数组),这些数组可以是数字单元格引用或区域。它的工作流程...

WPS-Excel表格sumproduct函数一次性算出相乘相加总额

excel表格单纯相加或者相乘大家都会应用,但是有时候我们需要算出相乘相加的总额,这种计算也是可以一次性算出的。今天来教大家怎样在WPS表格中,让数据一次性算出相乘相加的总额,会了这个小技巧,会方便很...

大神级Sumproduct公式这么好用,1分钟学会!

在工作中,一般用不到Sumprodct函数公式,但是真的好用,我们举工作中的3个场景来说明。1、快速相乘相加如下所示,我们各种商品有一个单价,然后对应有一些数量,我们现在需要快速汇总总金额数据有没有小...

万能函数Sumproduct,除了求和和计数外,还可以排名

在众多的Excel函数中,能同时完成求和、计数以及排名功能的函数不多,其中Sumproduct就是其中一个。一、万能函数Sumproduct:功能及语法结构。功能:返回相应区域数组乘积的和。语法结...