Spring 的元注解
一、元注解介绍
1.1.源码引入

1.2.元注解介绍
从上面的图片可知,Spring 有四个【负责注解其他注解】的元注解,分别是:
@Target:标识该注解可以用于标注哪些程序元素,比如类、方法、字段等。
@Retention:标识该注解的生命周期,即在什么时候该注解会被保留,可选的生命周期包括源码(SOURCE)、编译时(CLASS)和运行时(RUNTIME)。

RetentionPolicy.SOURCE:该注解仅在源代码中存在,编译器编译时会忽略这些注解。这意味着,编译后的.class文件中不会包含这些注解。这种注解一般用于编译时的检查和调试。
RetentionPolicy.CLASS:该注解在编译时会被保留,并存储在.class文件中,但在运行时会被忽略。这种注解主要用于编译时的字节码处理。
RetentionPolicy.RUNTIME:该注解在运行时会被保留,并可以通过反射获取到注解信息。这种注解一般用于在运行时处理某些逻辑,比如实现自定义的 IOC 框架、AOP 框架等。
一般来说,如果需要在运行时通过反射获取注解信息,那么就需要将注解的 Retention 属性设置为 RetentionPolicy.RUNTIME。
@Documented:标识该注解会被包含在 JavaDoc 中。
@Inherited:用于指定注解是否可以被继承,默认情况下,注解不会被子类继承。
二、元注解的必要性
在Spring框架中,元注解的使用是可选的,可以根据需要省略其中的一些。以下是一些可以被省略的元注解:
1. @Target:如果不指定该元注解,注解可以应用于所有的目标元素类型。
2. @Retention:如果不指定该元注解,默认的生命周期是运行时(RUNTIME)。
3. @Documented:如果不指定该元注解,注解在Java文档中不会被包含。
4. @Inherited:如果不指定该元注解,注解不能被子类继承。
三、元注解省略的限制
虽然从上面的介绍看,好像每个都能省略,但实际上,无法同时省略所有四个元注解。
其中,@Retention和@Target是必需的,因为它们定义了注解的生命周期和应用目标。如果省略这两个元注解,编译器将无法正确解析和处理注解。
@Documented和@Inherited是可选的,可以根据需要省略。但请注意,省略@Documented会导致注解不会出现在Java文档中,而省略@Inherited则意味着注解不能被子类继承。
相关文章:
Spring 的元注解
一、元注解介绍 1.1.源码引入 1.2.元注解介绍 从上面的图片可知,Spring 有四个【负责注解其他注解】的元注解,分别是: Target:标识该注解可以用于标注哪些程序元素,比如类、方法、字段等。 Retention:标…...
【前缀和】238. 除自身以外数组的乘积
238. 除自身以外数组的乘积 解题思路 前缀与后缀的思路对于给定索引i,将它左边的所有数字乘积乘以右边所有数字的乘积初始化两个数组L R计算L[i] L[i - 1] * nums[i - 1] 也就是左侧所有数字的乘积计算R[i] R[i 1] * nums[i 1] 也就是右侧所有数字的成绩计算L…...
【Java中间件】RocketMQ
RocketMQ 一、MQ概述 Message Queue,是一种提供消息队列服务的中间件。提供了消息生产、存储、消费全过程API的软件系统。 MQ的作用 限流削峰:当用户发送超量请求时,将请求暂存,以便后期慢慢处理。如果不使用MQ暂存直接请求到…...
Megatron-LM、NVIDIA NeMo、MegaMolBART 、model_optim_rng.pt 文件是什么?
本文涉及以下几个概念,分别是: Megatron和Megatron-LM-v1.1.5-3D_parallelism NVIDIA NeMo Megatron和Megatron-LM-v1.1.5-3D_parallelism是什么? Megatron是由NVIDIA开发的一种用于训练大规模语言模型的开源框架。它旨在提供高效的分布式…...
2023年信息系统项目管理师如何报名?老司机告诉你
信息系统项目管理师是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目之一,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资…...
linux ubuntu系统 命令备忘
一、安装软件包的命令 1、验证安装包是否安装 dpkg -s <软件包名> 2、从软件源服务器获取最新的软件信息并缓存到本地 apt update 3、从本地仓库中对比系统中所有已安装的软件,如果有新版本的话则进行升级 apt upgrade 4、列出本地仓库中所有的软件包名…...
我的第一个flutter项目(Android Webview)
前言:flutter开发环境搭建Flutter的开发环境搭建-图解_☆七年的博客-CSDN博客 第一个flutter简单项目,内容是一个主界面,其中: 1.内容点击数字自增 2.跳转一个空页, 3.跳转一个WebView界面 其中涉及添加主键…...
微信机器人搭建详细教程
确保已安装Python和pip。 在D盘上创建名为wxbot的文件夹,并将你的Python机器人项目文件放在这个目录中。 在D盘的wxbot文件夹中打开命令行工具,并创建一个新的Python虚拟环境(可选): python -m venv venv激活虚拟环…...
opengauss安装
opengauss安装 系统环境 Redhat版本:redhat7.6 虚拟机ip:192.168.5.144 Gauss版本:openGauss-5.0.0-CentOS-64bit-all.tar.gz 企业版 一.准备软硬件环境 1.1 安装依赖包 yum -y install bzip2 python3 libaio-devel flex bis…...
什么是SVM算法?硬间隔和软间隔的分类问题
SVM全称是supported vector machine(支持向量机),即寻找到一个超平面使样本分成两类,并且间隔最大。 SVM能够执行线性或⾮线性分类、回归,甚至是异常值检测任务。它是机器学习领域最受欢迎的模型之一。SVM特别适用于中小型复杂数据集的分类。…...
Normalization(BN and LN) in NN
Batch Normalization 称为批标准化。批是指一批数据,通常为 mini-batch;标准化是处理后的数据服从 N ( 0 , 1 ) N(0,1) N(0,1) 的正态分布。在训练过程中,数据需要经过多层的网络,如果数据在前向传播的过程中,尺度发…...
opencv-22 图像几何变换01-缩放-cv2.resize()(图像增强,图像变形,图像拼接)
什么是几何变换? 几何变换是计算机图形学中的一种图像处理技术,用于对图像进行空间上的变换,而不改变图像的内容。这些变换可以通过对图像中的像素位置进行调整来实现。 常见的几何变换包括: 平移(Translation&#x…...
python机器学习(五)逻辑回归、决策边界、代价函数、梯度下降法实现线性和非线性逻辑回归
线性回归所解决的问题是把数据集的特征传入到模型中,预测一个值使得误差最小,预测值无限接近于真实值。比如把房子的其他特征传入到模型中,预测出房价, 房价是一系列连续的数值,线性回归解决的是有监督的学习。有很多场…...
聊聊Linq中.AsEnumerable(), AsQueryable() ,.ToList(),的区别和用法
聊聊Linq中.AsEnumerable(), AsQueryable() ,.ToList(),的区别和用法 当使用LINQ查询数据时,我们常常会面临选择使用.AsEnumerable(), .AsQueryable(), 和 .ToList()方法的情况。这些方法在使用时有不同的效果和影响,需要根据具体场景来选择合适的方法。…...
【机器学习】机器学习中的“本体”概念
一、说明 在机器学习中,本体越来越多地用于提供基于相似性分析和场景知识的 ML 模型。 在传统的基于标签的定义中,对象往往是孤立的,可扩展性差,存在重复的可能性,对象之间的关系无法体现。在基于本体的定义中…...
ChatGPT是否能够进行对话中的参考和指代解析?
ChatGPT在对话中的参考和指代解析方面有一定的潜力,但需要针对具体任务和上下文进行定制和优化。参考和指代解析是指理解对话中的代词、名词短语等表达方式所指代的具体对象或信息。在对话中,参考和指代解析对于理解上下文、保持对话连贯性和生成准确回复…...
网红项目AutoGPT源码内幕及综合案例实战(三)
AutoGPT on LangChain PromptGenerator等源码解析 本节阅读AutoGPT 的prompt_generator.py源代码,其中定义了一个PromptGenerator类和一个get_prompt函数,用于生成一个提示词信息。PromptGenerator类提供了添加约束、命令、资源和性能评估等内容的方法,_generate_numbered_l…...
第八章:list类
系列文章目录 文章目录 系列文章目录前言list的介绍及使用list的介绍list的使用list的构造函数list的迭代器list的容量list的成员访问list的增删改查 list与vector的对比总结 前言 list是STL的一种链表类,可以在常数范围内在任意位置进行插入和删除的序列式容器。 …...
VUE声音-报警-实现方式
1.先准备一个mp3文件包:(这个24小时生效如果失效可留言,看到就会增加时效) 获取mp3地址: https://www.aliyundrive.com/t/uQ8zqjn9JKSfm7QlGOSr2.代码内容 进入页面就会自动 播放mp3的内容信息了。 <template>…...
【Coppeliasim C++】焊接机械臂仿真
项目思维导图 该项目一共三个demo: 机械臂末端走直线 2. 变位机转台转动 3.机械臂末端多点样条运动 笔记: 基于等级的蚁群系统在3D网格地图中搜索路径的方法: 基于等级的蚁群系统(Hierarchical Ant Colony System,HACS)是一种改进的蚁群优化算法。它在传…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
【AI学习】三、AI算法中的向量
在人工智能(AI)算法中,向量(Vector)是一种将现实世界中的数据(如图像、文本、音频等)转化为计算机可处理的数值型特征表示的工具。它是连接人类认知(如语义、视觉特征)与…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
Spring是如何解决Bean的循环依赖:三级缓存机制
1、什么是 Bean 的循环依赖 在 Spring框架中,Bean 的循环依赖是指多个 Bean 之间互相持有对方引用,形成闭环依赖关系的现象。 多个 Bean 的依赖关系构成环形链路,例如: 双向依赖:Bean A 依赖 Bean B,同时 Bean B 也依赖 Bean A(A↔B)。链条循环: Bean A → Bean…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
