javaSE -- 注解学习笔记

news2024/11/14 23:45:55

参考资料:https://blog.csdn.net/KingBoyWorld/article/details/105337011

                  https://blog.csdn.net/qq_42843172/article/details/107293408

1.注解是什么?

java注解是一个写在接口、类、属性方法上的一个标签。跟注释不同,能够影响代码。

注解在代码运行时可以被反射读取并进行相应操作,从而影响到正常运行结果。


卧槽,你看  @SpringBootApplication @EnableGlobalMethodSecurity  我在springboot启动里,多加了个注解,已运行就报错,还tm不显示原因。

 元数据和注解

什么是元数据?

从java来看,元数据就是用于提供 类、方法、属性 等其他程序元素的额外信息。本身并不属于代码的一部分。

而,注解呢,就是元数据的载体。

我么设置注解,被jvm读取到,根据我们注解的信息,利用反射给我们进行数据修改。

注解和反射

我们知道,jvm不会自动为我们通过反射机制来创建对象,需要我们手写反射API,被他读取到创建。我们拿到class对象,同样也能拿到他的相应注解。

在许多框架中,有个好处,基本都有默认实现。但是我们要去实现某个功能的自定义实现,需要我们去实现或继承他预留的一个接口,通过反射+注解,拿到我们自定义的对象,因为我们遵守了他的预留接口规范,进而调用其中的方法。

举例spring框架:模拟spring利用反射动态创建携带@Compont注解的对象_帅气的黑猫杰克的博客-CSDN博客

2.为什么要使用注解?

 xml也是一种元数据,本身并不属于代码的一部分,但是呢?却能够影响我们代码。spring通过读取配置文件中的信息,再利用反射创建需要控制反转的对象。

缺点:整个项目的配置信息都写在这个配置文件里,是集中式配置,但是文件多了,变得很复杂。

现在,提倡解耦(比如:一个类和一个类的,关系小),而注解呢是分布式配置,满足这个需求。

3.注解的作用

我们在使用一些框架是,用注解用的比较多。

开发者的视角可以解读出这个类/方法/属性的作用以及该怎么使用,而从框架的视角则可以解析注解本身和其属性实现各种功能编译器的角度则可以进行一些预检查(@Override)抑制警告(@SuppressWarnings)

  • 作为特定标记,用于告诉编译器一些信息
  • 编译时动态处理,如动态生成代码
  • 运行时动态处理,作为额外信息的载体,如获取注解信息

4.注解的分类

元注解 : java内置的注解,标明该注解的使用范围、生命周期等。

标准注解  : Java提供的基础注解,标明过期的元素/标明是复写父类方法的方法/标明抑制警告

第三方注解 :  第三方定义的注解,含义和功能由第三方来定义和实现。

4.1元注解

用于定义注解的注解,通常用于注解的定义上,标明该注解的使用范围、生效范围等。元XX 都代表最基本最原始的东西,因此,元注解就是最基本不可分解的注解,我们不能去改变它只能使用它来定义自定义的注解

一般包括这5种,

 @Retention、@Target、@Documented、@Inherited、@Repeatable,其中最常用的是@Retention和@Target下面分别介绍一下这五种元注解。

太多了,我截取关键的部分 。

1. @Retention

注释自定义注解要保留下面那个时期。

java代码到运行的周期 : 源文件 - Class - 运行时数据

一共3个值,SOURCE - CLASS - RUNTIME

 如:以下代码,他能保留到运行时。


@Target({ElementType.TYPE}) // 声明自定义注解注解类型
@Retention(RetentionPolicy.RUNTIME) // 保留声明周期
public @interface MyAnnotation {

}

2.@Target

 就是,定义注解能用在java那些元素上,类....,field、method、package、方法参数等等。

我的理解是反射能拿到,他都能拿到。

 3.@Inherited 

表明自定义注解是否能被继承。

4.@Repeatable

 这个就是可重复性使用了,

@Repeatable(MyAnnotations.class) // 引用存放你重复使用的容器

5.@Documented

是否在生成的JavaDoc文档中体现,被标注该注解后,生成的javadoc中,会包含该注解,这里就不做演示了。

4.2 标准注解

 java内置的注解,只不过是在元注解的基础上开发的。

不只有这三个,看一下即可。

 剩下的,涉及很多底层原理,对于我的使用状况,现阶段搞清楚框架是如何通过反射注解拿到我的自定义对象即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/635544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法模板(5):数学(1):数学知识(1)

数论 整数的整除性 [x]表示不超过x的最大整数,叫做取整函数或高斯函数。设整数a,b不同时为零,则存在一对整数m,n,使得 ( a , b ) a m b n (a, b) am bn (a,b)ambn。注:a和b的最大公因数会写成 (a, b)…

vue3中使用Vuex

目录 什么是Vuex安装和配置Vuex安装Vuex配置Vuex 使用VuexState定义State访问State MutationsMutations 的特点定义Mutations触发Mutations 修改State中的状态 ActionAction 的特点和作用定义Action触发Action GetterGetter 的特点和作用定义Getter获取Getter ModuleModule 的特…

ARM基础(4):L1 Cache之I-Cache和D-cache详解

在上一篇文章ARM基础(3):MPU内存保护单元详解及例子中,我介绍了MPU,我们知道MPU允许按区域修改一级Cache的属性,这个Cache一般为L1 Cache,它位于CPU的内部,用来加快指令和数据的访问速度。同时,…

chatgpt赋能python:如何在Python和Java之间进行整合

如何在Python和Java之间进行整合 在现在这个编程的时代里,使用一种编程语言或一种技术通常不能满足所有的需求。因此,当你需要在Python和Java之间进行整合时,这篇文章就为你介绍了一些解决方案。 为什么需要Python和Java进行整合 Python和…

redis 字典的实现

1.数据结构 节点数据结构 因为是基于开链法的哈希表实现,所以需要维护了一个next节点 typedef struct dictEntry {void *key;union {void *val;uint64_t u64;int64_t s64;double d;} v;struct dictEntry *next; } dictEntry; 复制 哈希表数据结构 其中size是当…

景区旅游多商户版小程序v14.3.1+前端

🎈 限时活动领体验会员:可下载程序网创项目短视频素材 🎈 🎉 有需要的朋友记得关赞评,文章底部来交流!!! 🎉 ✨ 源码介绍 【新增】全新授权登录支持取消登录 【新增】商…

3.12生产者消费者模型 3.13条件变量 3.14信号量 C++实现生产者消费者模型

3.12生产者消费者模型 生产者消费者模型中的对象: 1、生产者 2、消费者 3、容器 若容器已满,生产者阻塞在这,通知消费者去消费;若容器已空,则消费者阻塞,通知生产者去生产。生产者可以有多个,消…

RK3588平台开发系列讲解(USB篇)Linux Android USB软件架构

平台内核版本安卓版本RK3588Linux 5.10Android 12文章目录 一、高通平台USB软件架构二、USB 设备侧软件组成2.1、OTG driver2.2、Device controller driver2.3、Gadget framework2.4、Function drivers三、USB 主机侧软件3.1、Host controller driver3.2、USB core3.3、USB PHY…

chatgpt赋能python:Python取消断点的方法

Python取消断点的方法 在Python开发过程中,我们经常需要设置断点来帮助我们调试代码。但是,有时候我们可能需要取消已设置的断点。本文将介绍如何取消Python中的断点。 1. 什么是断点 在Python中,断点是为了帮助调试代码而设置的一个标志。…

网络层:IPv4地址

网络层:IPv4地址 笔记来源: 湖科大教书匠:IPv4地址概述 湖科大教书匠:分类编址的IPv4地址 湖科大教书匠:划分子网的IPv4地址 湖科大教书匠:无分类编址的IPv4地址 IPv4地址就是给因特网(Internet)上的每一…

零售场景梳理和运筹优化工作经验总结

文章目录 亡羊补牢不为迟零售行业规模大卷出零售新高度运筹优化实践经验 亡羊补牢不为迟 由于工作岗位变动的缘故,暂时要告别零售场景了。当初自己没想太多就一头扎进了“新”零售这个场景,迄今为止都没有针对零售场景做一个通盘的梳理,现在…

御2pro,带屏遥控器航测设置

御2遥控器航测设置 0 前言1 遥控器设置2 航测软件设置3 航测设置 0 前言 无人机:御2 或者御2 pro,非变焦版本遥控器:大疆带屏控器 RM500 1 遥控器设置 默认的遥控器控制软件CONNECT只能航拍,无法航测,必须调节为航…

Docker常用基本命令

一、docker的基础命令 1、启动docker systemctl start docker 2、关闭docker systemctl stop docker 3、重启docker systemctl restart docker 4、设置docker开机自启动 systemctl enable docker 5 , 查看docker运行状态(显示绿色代表正常启动…

类和对象(再谈构造函数)

文章目录 1.再谈构造函数1.1构造函数的赋值1.2初始化列表1.3 explicit关键字 2. static成员2.1概念2.2特性2.3例题 3 .友元3.1 友元函数3.2友元类 4.内部类5.匿名对象6.拷贝对象时编译器的一些优化 1.再谈构造函数 1.1构造函数的赋值 在创建对象时,编译器通过调用…

使用自签发CA证书为EMQX开启双向认证

文章目录 背景信息1、CA证书信任模型2、创建证书2.1 Root CA 证书创建2.2 emqx 服务端证书签发2.3 中间CA证书签发2.4 设备证书签发 3、配置EMQX服务端证书4、客户端使用TLS连接EMQX 背景信息 本文主要介绍了通过建立三层CA证书链,为EMQX集群提供PKI服务&#xff0c…

STM32基于库函数新建工程模板

基于库函数版本 准备资料: a) V3.5 固件库包:STM32F10x_StdPeriph_Lib_V3.5.0 这是 ST 官网下载的固件库完 整版,我们光盘目录: 软件资料\STM32 固件库使用参考资料\STM32F10x_StdPeriph_Lib_V3.5.0 我们官方论坛下载地址&#…

C++入门(嵌入式学习)

C入门学习 前言C概述C和C的区别 引用引用概念引用性质引用的应用 C输入和赋值string字符串函数提高函数的默认值默认值的注意事项函数的重载函数重载可能产生的问题扩充 内联函数 前言 C概述 C是一种通用的高级编程语言,它是由Bjarne Stroustrup于20世纪80年代初在…

论文笔记:MEASURING DISENTANGLEMENT: A REVIEW OF METRICS

0 摘要 学习解缠和表示数据中的变化因素是人工智能中的一个重要问题。虽然已经取得了许多关于学习这些表示的进展,但如何量化解缠仍然不清楚。 虽然存在一些度量标准,但对它们的隐含假设、真正衡量的内容以及限制了解甚少。因此,当比较不同的…

睡眠脑电中的神经跨频率耦合函数

导读 人类大脑是一个紧密连接的复杂系统。虽然其结构比较固定,但它可以实现很多不同的功能。其中一个重要的功能是自然睡眠过程,这个过程可以改变意识和随意肌肉活动。在神经层面上,这些改变会伴随着大脑连接的变化。为了揭示这种与睡眠相关…

推荐一个好用的开发工具百宝箱

随着科技不断发展,越来越多的工具在网络上应运而生,方便我们更加高效地完成各种任务。今天我要向大家介绍一款在线工具——码加在线工具 - 做更好的工具,它可以帮助你轻松完成许多繁琐、复杂的工作。 首先,码加在线工具 是一款非…