一篇文章,系统性聊聊Java注解

你好!

这类系统性聊聊***知识点的文章,是希望给大家带来对某个技术的全貌认识,如果大家喜欢,后续可以陆续更新此系列

下面,开始今天的分享

在之前,我们已经分享过注解相关的三个面试题,

今天的分享,将系统性地探讨Java注解的概念、类型、应用以及实战示例,帮助你全面理解注解

一、Java注解的基本概念

注解本质上是一种特殊的修饰符,类似于类、方法、变量前的public、private等关键字,但它不直接影响程序的执行逻辑,而是用来为程序元素(如类、方法、字段、参数等)添加元数据。这些元数据可以在编译时、运行时或通过工具进行处理,实现特定的功能增强或行为调整。

一个注解由@符号后跟注解类型名构成,例如@Override、@Deprecated等。注解可以接受参数,通过括号内的键值对或无参列表形式指定。例如:

public @interface MyAnnotation {String value() default "default_value";int id();
}@MyAnnotation(value = "myValue", id = 123)
public class MyClass {}

二、Java注解的类型

Java注解根据其生命周期可分为三大类:

  1. 源码注解(Source Code Annotations):这类注解只存在于源代码阶段,编译器在编译时对其进行处理,但不会包含在编译后的字节码中。例如@Override、@SuppressWarnings等,它们主要用于辅助编译器进行错误检查和警告提示。
  2. 编译时注解(Compile-Time Annotations):这类注解在编译时被编译器或其他工具(如APT,Annotation Processing Tool)处理,并可能生成额外的源代码或字节码。例如使用Lombok库时的@Data、@Builder等注解,它们简化了代码编写,实现了自动化的getter/setter、构造器、equals/hashCode等方法生成。
  3. 运行时注解(Runtime Annotations):这类注解在编译后仍保留在字节码中,可以在运行时通过反射机制访问和处理。例如Spring框架中的@Component、@Autowired等注解,它们用于实现依赖注入、切面编程等功能。

三、Java注解的应用场景

注解在Java开发中的应用场景广泛,以下列举几个典型例子:

  1. 编译检查与辅助:如@Override用于验证重写方法的正确性,@Deprecated标记过时的API,@SuppressWarnings抑制特定类型的编译警告。
  2. 代码生成与构建:如Lombok库利用注解简化对象封装,减少样板代码;构建工具Maven、Gradle通过注解配置项目依赖、插件等信息。
  3. 依赖注入与框架集成:如Spring框架利用注解进行组件扫描、依赖注入、事务管理、AOP编程等,极大地简化了企业级应用的开发。
  4. 测试与监控:如JUnit中的@Test、@Before、@After等注解指导测试执行流程,AspectJ的@Trace、@Profile等注解用于性能监控、日志记录等。
  5. 序列化与持久化:如JPA、Hibernate等ORM框架使用注解(如@Entity、@Id、@GeneratedValue等)描述对象与数据库表的映射关系,简化数据库操作。

四、Java注解实战示例

以Spring框架中的@Service注解为例,展示运行时注解的实际应用。假设我们有一个用户服务接口及其实现类:

public interface UserService {User getUserById(Long id);
}@Service
public class UserServiceImpl implements UserService {// 实现方法...
}

在上述代码中,@Service注解标注在UserServiceImpl类上,表明该类是一个业务服务组件。当Spring容器启动时,会通过类路径扫描发现带有@Service注解的类,并将其作为Bean进行实例化、管理和依赖注入。这样,在其他需要使用UserService的地方,只需通过@Autowired注解即可轻松获取到服务实例,无需手动创建和管理对象,大大提高了代码的可维护性和可测试性。

@Controller
public class UserController {@Autowiredprivate UserService userService;// 使用userService...
}

除此之外,大家还可以通过之前分享的文章进行补充

Java中如何实现自定义注解?

也欢迎加入我的知识星球!有三天免费体验期!

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

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

相关文章

syncGradle项目时报错Unknown Kotlin JVM target: 22

解决方案1 定位到build.gradle.kts的出问题行,将其注释掉然后把sourceCompatibility行也注释掉重新sync. 这样会自动使用默认兼容的版本 你也可以根据文档手动解决兼容问题2 Configure a Gradle project | Kotlin Documentation (kotlinlang.org) ↩︎ Compatibil…

Autodesk AutoCAD 2025 for Mac:强大的二维三维绘图工具

Autodesk AutoCAD 2025 for Mac是一款专为Mac用户打造的计算机辅助设计软件,它在继承了AutoCAD系列软件的优秀传统的基础上,针对Mac系统进行了全面优化,为用户提供了更出色的绘图和设计体验。 这款软件不仅支持用户创建和编辑复杂的二维几何图…

【NodeMCU实时天气时钟温湿度项目 3】连接SHT30传感器,获取并显示当前环境温湿度数据(I2C)

今天,我们开始第三个专题:连接SHT30温湿度传感器模块,获取当前环境实时温湿度数据,并显示在1.3寸TFT液晶显示屏上。 第一专题内容,请参考 【NodeMCU实时天气时钟温湿度项目 1】连接点亮SPI-TFT屏幕和UI布局设计…

【统计推断】-01 抽样原理之(六):三个示例

目录 一、说明二、处理有限的、大尺度的母体抽样三、非参数的估计四、连续母体抽样技巧--分箱 一、说明 对于抽样问题,前几期文章都是理论探讨。本篇给出若干示例,展现具体的情况下,面对数据,如何给出处理策略。 二、处理有限的…

安全数据交换系统哪个好?该如何选型?

安全数据交换系统是用于在不同网络或组织之间安全、高效地传输和共享数据的解决方案。安全数据交换系统对于任何需要处理敏感数据、确保数据安全、并满足合规要求的组织来说都是至关重要的。 这种系统通常用于以下目的: 1)数据传输:允许用户…

【双曲几何-05 庞加莱模型】庞加来上半平面模型的几何属性

文章目录 一、说明二、双曲几何的上半平面模型三、距离问题四、弧长微分五、面积问题 一、说明 庞加莱圆盘模型是表示双曲几何的一种方法,对于大多数用途来说它都非常适合几何作图。然而,另一种模型,称为上半平面模型,使一些计算变…

Reactor Netty TCP 客户端-响应式编程-012

🤗 ApiHug {Postman|Swagger|Api...} = 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace The Next Generation API Development Platform …

数据结构之栈的超详细讲解

目录 引言 一.栈的概念 二.栈的结构 三.栈的实现 栈结构的实现 栈操作函数的声明 栈中方法的实现 栈的初始化 栈的销毁 入栈 出栈 取栈顶元素 判断栈中是否为空 获取栈中数据个数 四.测试 代码展示: 结构展示: 五.小结 六.完整代码 Stack.h Stack.c text…

【管理篇】管理三步曲:管理规划(一)

目录标题 管理到底都要做哪些事呢如何开始带团队? 职能:如何界定团队是干什么的?目标:如何为团队设定合理的目标规划资源:需要申请哪些资源(1)你是否了解资源的丰富性?(2…

PSoc™62开发板之IoT应用

实验目的 使用PSoc62™开发板驱动OLED模块,实时监控室内的光照强度、温度信息 实验准备 PSoc62™开发板SSD1309 OLED模块DS18B20温度传感器BH1750光照传感器 模块电路 SSD1309 OLED模块的电路连接和模块配置教程请参考之前的文章,这里不详细展开描…

【JavaEE网络】HTTP/HTTPS协议的工作原理与格式详解

目录 HTTP/HTTPSHTTP是什么理解“应用层协议”理解HTTP协议的工作过程HTTP协议格式 HTTP/HTTPS HTTP是什么 应用层,一方面是需要自定义协议,一方面也会用到一些现成的协议 HTTP及HTTPS是应用层重点协议 使用浏览器,打开网站,这…

springboot拦载器

1、拦载器 package com.Interceptor;import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;import javax.security.auth.login.Log…

【NodeMCU实时天气时钟温湿度项目 1】连接点亮SPI-TFT屏幕和UI布局设计

前言 从今天开始,我们详解介绍制作实时天气时钟项目的方法步骤,主要分以下几个专题分别进行:(1)连接点亮SPI-TFT屏幕和UI布局设计;(2)NodeMCU的WIFI模式设置及连接;&…

一个基于ComfuUI Api的 AIGC自动绘画实现方案

工作流程图 基本原理已经弄通,下一步要开始编码搬砖了。整个自动绘画的流程如下,暂就不整高深U什么L了,写个简单明了能容易看懂的流程图。UI借用了下墨刀里的AI绘画公开原型 部署节点 整个系统的后端服务典型部署需要3类节点 Aigc Server&…

大数据Spark教程从入门到精通第三篇:Spark核心模块

一:Spark核心模块 1:概述 Spark最底层的模块是Apache Spark Core,其他的功能都是基于此实现的。 Spark SQL操作结构化数据的模块 Spark Streaming 对流式数据处理的模块。 Spark MLlib对机器学习支持的一个功能模块。学习难度很高 Spark Gra…

cmd输入mysql -u root -p无法启动

问题分析:cmd输入mysql -u root -p无法启动 解决方法:配置系统环境变量 1.找到mysql安装文件下的bin文件:(复制改文件地址,如下图所示) 2.电脑桌面下方直接搜索环境变量并进入,如下图 3.点击环境变量&a…

nginx--防盗链

盗链 通过在自己网站里面引用别人的资源链接,盗用人家的劳动和资源 referer referer是记录打开一个页面之前记录是从哪个页面跳转过来的标记信息 正常的referer信息 none:请求报文首部没有referer首部,比如用户直接在浏览器输入域名访问web网站&…

java09基础(构造方法 继承)

目录 一. 构造方法 1. 构造方法 2. 构造代码块 二. 继承 1. 基本概念 2. protected 关键字 3. 构造方法的访问特点 4. 成员变量的访问特点 5. 成员方法的访问特点 6. 向上向下转型 6.1 向上转型 6.2 向下转型 一. 构造方法 1. 构造方法 初始化一个新的对象 构建、创…

2024年03月 Scratch 图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch图形化等级考试(1~4级)全部真题・点这里 一、单选题(共10题,共30分) 第1题 圆点角色的程序如下图1所示(角色默认方向90),运行程序,输入“HLHLHLHL”后得到的结果如下图2所示,如果想得到下图3中的结果,应该输入的字符串是?( ) A:HLLLHLLL B:LLLLLLL…

【docker 】 push 镜像提示:denied: requested access to the resource is denied

往 Docker Registry &#xff08;私服&#xff09;push 镜像提示&#xff1a;denied: requested access to the resource is denied 镜像push 语法&#xff1a;docker push <registry-host>:<registry-port>/<repository>:<tag> docker push 192.16…