中国搜索引擎/沈阳seo优化排名公司

中国搜索引擎,沈阳seo优化排名公司,易云自助建站,wordpress+海+主题一、注解的定义 核心概念 注解是Java中一种特殊形式的“元数据”,用于为类、方法、字段、参数等代码元素附加说明信息。它不会直接影响代码逻辑,但可以通过编译器、框架或反射机制进行解析和处理。 与注释(Comment)的区别 注释&a…

一、注解的定义

  • 核心概念
    注解是Java中一种特殊形式的“元数据”,用于为类、方法、字段、参数等代码元素附加说明信息。它不会直接影响代码逻辑,但可以通过编译器、框架或反射机制进行解析和处理。

  • 与注释(Comment)的区别

    • 注释:仅供开发者阅读,编译器忽略。
    • 注解:携带可被程序读取的结构化数据(如配置、校验规则等)。

二、Java内置的核心注解

Java提供了一些基础注解,分为两类:

  1. 元注解(Meta-Annotation)
    用于定义其他注解的行为:

    • @Retention:指定注解的保留范围(源码、Class文件、运行时)。
       
      @Retention(RetentionPolicy.RUNTIME) // 运行时可通过反射读取 public @interface MyAnnotation {} 
    • @Target:限制注解可应用的位置(类、方法、字段等)。
       
      @Target(ElementType.METHOD) // 只能标注在方法上 public @interface LogExecutionTime {} 
    • @Documented:注解是否出现在JavaDoc中。
    • @Inherited:是否允许子类继承父类的注解。
    • @Repeatable(Java 8+):允许同一位置重复使用注解。
  2. 功能型注解

    • @Override:标记方法重写父类或接口方法(编译器校验)。
    • @Deprecated:标记过时的代码元素(编译时警告)。
    • @SuppressWarnings:抑制编译器警告(如@SuppressWarnings("unchecked"))。
    • @FunctionalInterface(Java 8+):声明接口为函数式接口。

三、自定义注解

通过@interface关键字定义注解:

 
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface AuthRequired { String role() default "user"; // 注解属性(可设置默认值) int priority() default 1; } 
  • 属性类型:仅支持基本类型、String、Class、枚举、注解及其数组。
  • 默认值:通过default关键字指定。

四、注解的处理方式

  1. 反射处理(Runtime)
    通过反射API(如getAnnotation())在运行时解析注解:

     
    Method method = obj.getClass().getMethod("myMethod"); if (method.isAnnotationPresent(AuthRequired.class)) { AuthRequired auth = method.getAnnotation(AuthRequired.class); String requiredRole = auth.role(); // 权限校验逻辑... } 
  2. 编译时处理
    使用注解处理器(AbstractProcessor)在编译期生成代码或校验逻辑(如Lombok)。

  3. 框架集成

    • Spring@Autowired(依赖注入)、@RequestMapping(定义HTTP端点)。
    • Hibernate@Entity(标记JPA实体类)、@Column(映射数据库字段)。
    • JUnit@Test(标记测试方法)。

五、典型应用场景

  1. 配置简化
    Spring Boot的@SpringBootApplication整合多个配置注解。

  2. 代码生成
    Lombok的@Data自动生成Getter/Setter和构造函数。

  3. 数据校验
    JSR-303规范的@NotNull@Size注解结合Hibernate Validator。

  4. API文档生成
    Swagger的@ApiOperation生成接口文档。


六、最佳实践

  1. 明确目标
    避免过度使用注解,优先保持代码可读性。
  2. 结合工具链
    如通过注解处理器生成代码(减少模板代码)。
  3. 兼容性
    注意注解的保留策略(如RUNTIME注解可能影响性能)。

示例代码:自定义权限校验注解

 
// 定义注解 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface RequiresRole { String value() default "user"; } // 使用注解 public class UserController { @RequiresRole("admin") public void deleteUser(String userId) { // 删除用户逻辑... } } // 通过AOP或拦截器处理注解 @Aspect public class RoleCheckAspect { @Before("@annotation(RequiresRole)") public void checkRole(JoinPoint joinPoint) { Method method = ((MethodSignature) joinPoint.getSignature()).getMethod(); RequiresRole annotation = method.getAnnotation(RequiresRole.class); String requiredRole = annotation.value(); // 校验当前用户角色是否匹配... } } 

通过注解,Java实现了配置、逻辑和元数据的高度解耦,极大提升了代码的可维护性和扩展性。

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

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

相关文章

tauri2+typescript+vue+vite+leaflet等的简单联合使用(一)

项目目标 主要的目的是学习tauri。 流程 1、搭建项目 2、简单的在项目使用leaflet 3、打包 准备项目 环境准备 废话不多说,直接开始 需要有准备能运行Rust的环境和Node,对于Rust可以参考下面这位大佬的文章,Node不必细说。 Rust 和…

关于流水线的理解

还是不太理解,我之前一直以为,对axis总线,每一级的寄存器就像fifo一样,一级一级的分级存储最后一级需要的数据。 像这张图,一开始是在解析axis流形式的数据包,数据包一直都能输入,所以valid一直…

Python代码之美:从规范到艺术

基础规范:代码的"颜值"很重要 👉大礼包🎁:👈 PEP 8:不只是规范,是写作艺术 良好的代码格式就像优美的书法,让人赏心悦目。比如: # 不推荐的写法 def calcul…

8 SpringBoot进阶(上):AOP(面向切面编程技术)、AOP案例之统一操作日志

文章目录 前言1. AOP基础1.1 AOP概述: 什么是AOP?1.2 AOP快速入门1.3 Spring AOP核心中的相关术语(面试)2. AOP进阶2.1 通知类型2.1.1 @Around:环绕通知,此注解标注的通知方法在目标方法前、后都被执行(通知的代码在业务方法之前和之后都有)2.1.2 @Before:前置通知,此…

七星棋牌 6 端 200 子游戏全开源修复版源码(乐豆 + 防沉迷 + 比赛场 + 控制)

七星棋牌源码 是一款运营级的棋牌产品,覆盖 湖南、湖北、山西、江苏、贵州 等 6 大省区,支持 安卓、iOS 双端,并且 全开源。这个版本是 修复优化后的二开版本,新增了 乐豆系统、比赛场模式、防沉迷机制、AI 智能控制 等功能&#…

【人工智能】Deepseek 与 Kimi 联袂:重塑 PPT 创作,开启智能演示新纪元

我的个人主页 我的专栏:人工智能领域、java-数据结构、Javase、C语言,希望能帮助到大家!!!点赞👍收藏❤ 前言 在当今快节奏的工作与学习场景中,PPT 制作常常是一项耗时耗力的任务。从前期的资…

基于JAVA+Spring+mysql_快递管理系统源码+设计文档

文末获取源码数据库文档 感兴趣的可以先收藏,有毕设问题,项目以及论文撰写等问题都可以和博主沟通,尽最大努力帮助更多的人! 摘 要 随着物流行业信息化的深入使得物流过程中货物的状态和变化透明化,现代信息化的接入使…

Python----数据分析(Numpy:安装,数组创建,切片和索引,数组的属性,数据类型,数组形状,数组的运算,基本函数)

一、 Numpy库简介 1.1、概念 NumPy(Numerical Python)是一个开源的Python科学计算库,旨在为Python提供 高性能的多维数组对象和一系列工具。NumPy数组是Python数据分析的基础,许多 其他的数据处理库(如Pandas、SciPy)都依赖于Num…

【SQL】MySQL中的字符串处理函数:concat 函数拼接字符串,COALESCE函数处理NULL字符串

MySQL中的字符串处理函数:concat 函数 一、concat ()函数 1.1、基本语法1.2、示例1.3、特殊用途 二、COALESCE()函数 2.1、基本语法2.2、示例2.3、用途 三、进阶练习 3.1 条件和 SQL 语句3.2、解释 一、concat &…

JAVA面试常见题_基础部分_Dubbo面试题(上)

Dubbo 支持哪些协议,每种协议的应用场景,优缺点? • dubbo: 单一长连接和 NIO 异步通讯,适合大并发小数据量的服务调用,以及消费者远大于提供者。传输协议 TCP,异步,Hessian 序列化…

StableDiffusion打包 项目迁移 项目分发 1

文章目录 SD项目迁移前置知识webui-user.batwebui.batlaunch_utils.py 下一篇开始实践 SD项目迁移 显卡驱动更新:https://www.nvidia.cn/geforce/drivers/ 下载安装三个程序: python3.10.6: https://www.python.org/downloads/release/python-3106/gi…

vscode使用豆包MARSCode----集成doubao1.5 DeepSeekR1 DeepseekV3模型的ai编程插件

引入扩展 打开VSCode扩展窗口,在搜索窗口搜索MarsCode,找到MarsCode 插件单击「install」,完成安装,登录即可使用MarsCode 编程助手。 主要功能 主要快捷键 / explain 解释项目代码,AI 返回的内容有结构分类&#…

uni小程序wx.switchTab有时候跳转错误tab问题,解决办法

在一个子页面里面使用uni.switchTab或者wx.switchTab跳转到tab菜单的时候,先发送了一个请求,然后执行跳转到tab菜单,但是这个时候,出错了........也是非常的奇怪,不加请求就没问题......但是业务逻辑就是要先执行某个请…

【Kimi】自动生成PPT-并支持下载和在线编辑--全部免费

【Kimi】免费生成PPT并免费下载 用了好几个大模型,有些能生成PPT内容; 有些能生成PPT,但下载需要付费; 目前只有Kimi生成的PPT,能选择模板、能在线编辑、能下载,关键全部免费! 一、用kimi生成PP…

编写一个程序,计算并输出1到100的和(Python版)

编写一个程序,计算并输出1到100的和 以下是两种计算1到100之和的方法: 方法一:循环累加法(适合编程练习) total 0 for num in range(1, 101):total num print("1到100的和为:", total)原理:通…

向量数据库milvus部署

官方文档 Milvus vector database documentationRun Milvus in Docker (Linux) | Milvus DocumentationMilvus vector database documentation 按部署比较简单,这里说一下遇到的问题 一:Docker Compose 方式部署 1、镜像无法拉取,(docker.io被禁) …

【密码学实战】Java 实现 SM2 国密算法(签名带id、验签及 C1C3C2 加密解密)

前言 SM2是中国国家密码管理局发布的椭圆曲线公钥密码算法标准(GB/T 32918),属于国密算法体系。与RSA和ECDSA相比,SM2在相同安全强度下密钥更短、计算效率更高。本文将介绍如何在Java中实现SM2的密钥生成、数字签名、验签、加密及…

网络原理---TCP/IP

活动发起人小虚竹 想对你说: 这是一个以写作博客为目的的创作活动,旨在鼓励大学生博主们挖掘自己的创作潜能,展现自己的写作才华。如果你是一位热爱写作的、想要展现自己创作才华的小伙伴,那么,快来参加吧&#xff01…

eMMC安全简介

1. 引言 术语“信息安全”涵盖多种不同的设计特性。一般而言, 信息安全是指通过实践防止信息遭受未经授权的访问、使用、披露、中断、篡改、检查、记录或销毁。 信息安全的三大核心目标为 机密性(Confidentiality)、完整性(Integr…

Python 数据结构 2.时间复杂度和空间复杂度

Life is a journey —— 25.2.28 一、引例:穷举法 1.单层循环 所谓穷举法,就是我们通常所说的枚举,就是把所有情况都遍历了的意思。 例:给定n(n ≤ 1000)个元素ai,求其中奇数有多少个 判断一…