JDK 常用的原生注解详解

Java常用注解大全(基于JDK17+SpringBoot3) 用原生注解+第三方验证注解。等SpringCloud注解。:自动装配(新版推荐用。:标记Mapper接口。自定义注解的实现步骤。 阅读详情

作为Java后端开发程序员,掌握JDK原生注解是基础且重要的技能。以下按照功能和类型分类,详细介绍必须掌握的JDK原生注解。

一、编译器提示类注解

这类注解主要用于给编译器提供额外信息,帮助开发者避免常见错误。

1. @Override

作用:标记方法是重写父类或实现接口的方法,如果方法签名不匹配,编译器会报错。

// 定义父类
class Animal {
    public void makeSound() {
        System.out.println("动物发出声音");
    }
}

// 子类重写父类方法
class Dog extends Animal {
    // 使用 @Override 注解确保正确重写
    @Override
    public void makeSound() {
        System.out.println("汪汪汪!");
    }
    
    // 如果错误地写成makeSound(String sound),编译器会报错
    // @Override
    // public void makeSound(String sound) { // 编译错误:没有重写父类方法
    //     System.out.println(sound);
    // }
}

2. @Deprecated

作用:标记类、方法或字段已过时,不推荐使用。使用时编译器会给出警告。

public class OldUtility {
    // 标记为过时的方法
    @Deprecated
    public static void oldMethod() {
        System.out.println("这是过时的方法,请使用newMethod()");
    }
    
    // 推荐使用的新方法
    public static void newMethod() {
        System.out.println("这是推荐使用的新方法");
    }
    
    // 也可以为过时的元素提供替代方案说明
    @Deprecated(since = "1.8", forRemoval = true)
    public static void legacyMethod() {
        System.out.println("这个方法将在未来版本中移除");
    }
}

3. @SuppressWarnings

作用:抑制编译器警告,避免不必要的警告信息干扰开发。

import java.util.*;

public class SuppressWarningsExample {
    public static void main(String[] args) {
        // 抑制"rawtypes"警告(使用原始类型)
        @SuppressWarnings("rawtypes")
        List list = new ArrayList(); // 不指定泛型类型
        
        // 抑制"unchecked"警告(类型转换不安全)
        @SuppressWarnings("unchecked")
        List<String> stringList = (List<String>) getList();
        
        // 抑制多个警告类型
        @SuppressWarnings({"unchecked", "rawtypes"})
        Map map = new HashMap();
        
        System.out.println("警告已被抑制");
    }
    
    private static List getList() {
        return Arrays.asList("a", "b", "c");
    }
}

二、元注解(用于定义其他注解的注解)

元注解是用来注解其他注解的注解,是自定义注解的基础。

1. @Target

作用:指定注解可以应用的程序元素类型。

import java.lang.annotation.ElementType;
import java.lang.annotation.Target;

// 定义一个只能用于方法的注解
@Target(ElementType.METHOD)
@interface MethodOnlyAnnotation {
    String value() default "";
}

// 定义一个可以用于类和方法的注解
@Target({ElementType.TYPE, ElementType.METHOD})
@interface ClassAndMethodAnnotation {
    String description() default "";
}

// 使用示例
@ClassAndMethodAnnotation(description = "这是一个测试类")
class TestClass {
    
    @MethodOnlyAnnotation("测试方法")
    @ClassAndMethodAnnotation(description = "测试方法描述")
    public void testMethod() {
        // 方法实现
    }
    
    // 以下代码会编译错误,因为 @MethodOnlyAnnotation 不能用于字段
    // @MethodOnlyAnnotation
    // private String field; // 编译错误
}

2. @Retention

作用:指定注解的保留策略(源码、编译时、运行时)。

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

// 只在源码中保留,编译后丢弃
@Retention(RetentionPolicy.SOURCE)
@interface SourceOnlyAnnotation {
    String value() default "";
}

// 编译时保留,包含在class文件中,但运行时不可见
@Retention(RetentionPolicy.CLASS)
@interface ClassRetentionAnnotation {
    String value() default "";
}

// 运行时保留,可以通过反射获取
@Retention(RetentionPolicy.RUNTIME)
@interface RuntimeAnnotation {
    String name() default "";
    int version() default 1;
}

// 运行时注解使用示例
@RuntimeAnnotation(name = "UserService", version = 2)
class UserService {
    @RuntimeAnnotation(name = "saveUser", version = 1)
    public void saveUser(String username) {
        System.out.println("保存用户: " + username);
    }
}

3. @Documented

作用:指定注解是否包含在JavaDoc文档中。

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

// 这个注解会被包含在JavaDoc中
@Documented
@Retention(RetentionPolicy.RUNTIME)
@interface PublicAPI {
    String value() default "这是一个公共API";
}

// 这个注解不会被包含在JavaDoc中(默认行为)
@Retention(RetentionPolicy.RUNTIME)
@interface InternalAPI {
    String value() default "内部API,不对外公开";
}

// 使用示例
@PublicAPI("用户服务公共接口")
class DocumentedExample {
    @PublicAPI("获取用户信息")
    public String getUserInfo() {
        return "用户信息";
    }
    
    @InternalAPI("内部处理逻辑")
    private void internalProcess() {
        // 内部处理
    }
}

4. @Inherited

作用:指定注解是否可以被子类继承。

import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

// 使用 @Inherited,子类会继承父类的这个注解
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@interface InheritedAnnotation {
    String value() default "";
}

// 不使用 @Inherited,子类不会继承父类的这个注解
@Retention(RetentionPolicy.RUNTIME)
@interface NonInheritedAnnotation {
    String value() default "";
}

@InheritedAnnotation("父类注解")
@NonInheritedAnnotation("父类非继承注解")
class ParentClass {
    // 父类实现
}

class ChildClass extends ParentClass {
    // 子类实现
    // ChildClass会自动拥有@InheritedAnnotation注解
    // 但不会拥有@NonInheritedAnnotation注解
}

// 测试继承效果
class InheritanceTest {
    public static void main(String[] args) {
        // 检查子类是否继承了注解
        if (ChildClass.class.isAnnotationPresent(InheritedAnnotation.class)) {
            System.out.println("子类继承了@InheritedAnnotation");
        }
        
        if (ChildClass.class.isAnnotationPresent(NonInheritedAnnotation.class)) {
            System.out.println("子类继承了@NonInheritedAnnotation");
        } else {
            System.out.println("子类没有继承@NonInheritedAnnotation");
        }
    }
}

5. @Repeatable (Java 8+)

作用:允许在同一位置重复使用同一个注解。

import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

// 定义重复注解的容器
@Retention(RetentionPolicy.RUNTIME)
@interface Authorities {
    Authority[] value();
}

// 定义可重复的注解
@Repeatable(Authorities.class)
@Retention(RetentionPolicy.RUNTIME)
@interface Authority {
    String role();
}

// 使用重复注解
@Authority(role = "ADMIN")
@Authority(role = "USER")
@Authority(role = "GUEST")
class MultiRoleService {
    public void accessResource() {
        System.out.println("多角色访问控制");
    }
}

// 测试重复注解
class RepeatableTest {
    public static void main(String[] args) {
        Authority[] authorities = MultiRoleService.class.getAnnotationsByType(Authority.class);
        System.out.println("角色数量: " + authorities.length);
        for (Authority auth : authorities) {
            System.out.println("角色: " + auth.role());
        }
    }
}

三、函数式接口相关注解

@FunctionalInterface (Java 8+)

作用:标记接口为函数式接口(只包含一个抽象方法的接口),编译器会验证接口是否符合函数式接口的要求。

@FunctionalInterface
interface Calculator {
    // 函数式接口只能有一个抽象方法
    int calculate(int a, int b);
    
    // 可以包含默认方法
    default void printResult(int result) {
        System.out.println("计算结果: " + result);
    }
    
    // 可以包含静态方法
    static void showInfo() {
        System.out.println("这是一个计算器接口");
    }
}

// 错误示例:以下代码会编译错误,因为有两个抽象方法
// @FunctionalInterface
// interface InvalidFunctionalInterface {
//     void method1();
//     void method2(); // 编译错误:函数式接口只能有一个抽象方法
// }

// 使用函数式接口
class FunctionalInterfaceExample {
    public static void main(String[] args) {
        // 使用Lambda表达式实现函数式接口
        Calculator add = (a, b) -> a + b;
        Calculator multiply = (a, b) -> a * b;
        
        int result1 = add.calculate(10, 20);
        add.printResult(result1);
        
        int result2 = multiply.calculate(5, 6);
        multiply.printResult(result2);
    }
}

四、空值检查相关注解 (Java 8+)

这些注解主要用于静态分析工具,帮助检测潜在的空指针异常。

1. @Nullable

2. @NonNull

import org.checkerframework.checker.nullness.qual.NonNull;
import org.checkerframework.checker.nullness.qual.Nullable;

// 注意:严格来说,@Nullable和@NonNull不是JDK原生注解,
// 而是来自Checker Framework,但Java 8+的Optional类提供了类似功能

import java.util.Optional;

class NullSafetyExample {
    // 使用Optional来避免空值问题(JDK原生方式)
    public Optional<String> findUserName(int userId) {
        // 模拟查找用户,可能找不到
        if (userId == 1) {
            return Optional.of("张三");
        } else {
            return Optional.empty(); // 返回空的Optional,而不是null
        }
    }
    
    // 安全地使用Optional
    public void processUser(int userId) {
        Optional<String> userName = findUserName(userId);
        
        // 方式1:检查是否存在
        if (userName.isPresent()) {
            System.out.println("找到用户: " + userName.get());
        } else {
            System.out.println("用户不存在");
        }
        
        // 方式2:提供默认值
        String name = userName.orElse("默认用户");
        System.out.println("用户名称: " + name);
        
        // 方式3:执行操作(如果存在)
        userName.ifPresent(nameStr -> System.out.println("处理用户: " + nameStr));
    }
}

五、综合使用示例

下面是一个综合使用多种注解的实际例子:

import java.lang.annotation.*;
import java.lang.reflect.Method;

// 自定义注解:用于标记需要权限验证的方法
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@interface RequirePermission {
    String[] roles() default {"USER"};
    boolean checkLogin() default true;
}

// 服务类
class SecureService {
    
    @RequirePermission(roles = {"ADMIN", "MANAGER"}, checkLogin = true)
    @Override
    public String toString() {
        return "安全服务实例";
    }
    
    @RequirePermission(roles = {"USER"})
    public void normalOperation() {
        System.out.println("执行普通操作");
    }
    
    @Deprecated(since = "2.0")
    public void oldOperation() {
        System.out.println("执行过时的操作");
    }
}

// 注解处理器(模拟权限检查)
class AnnotationProcessor {
    public static void main(String[] args) throws Exception {
        Class<?> serviceClass = SecureService.class;
        SecureService service = new SecureService();
        
        // 遍历所有方法,检查 @RequirePermission 注解
        for (Method method : serviceClass.getDeclaredMethods()) {
            if (method.isAnnotationPresent(RequirePermission.class)) {
                RequirePermission permission = method.getAnnotation(RequirePermission.class);
                
                System.out.println("方法: " + method.getName());
                System.out.println("需要角色: " + String.join(", ", permission.roles()));
                System.out.println("需要登录: " + permission.checkLogin());
                System.out.println("---");
                
                // 模拟执行方法
                if (method.getParameterCount() == 0) {
                    method.invoke(service);
                }
            }
        }
    }
}

总结

必须掌握的核心注解:

  1. 编译器提示类:

    • @Override:确保正确重写
    • @Deprecated:标记过时API
    • @SuppressWarnings:抑制编译警告
  2. 元注解:

    • @Target:指定注解使用位置
    • @Retention:指定注解保留策略
    • @Documented:控制JavaDoc包含
    • @Inherited:控制注解继承
    • @Repeatable:支持重复注解
  3. 函数式编程:

    • @FunctionalInterface:标记函数式接口

学习建议:

  1. 优先掌握:@Override、@Deprecated、@SuppressWarnings 这三个是最常用的
  2. 理解原理:元注解是自定义注解的基础,必须理解其工作原理
  3. 实践应用:在实际项目中尝试使用这些注解,特别是运行时注解配合反射
  4. 注意版本:某些注解需要特定的Java版本(如@Repeatable需要Java 8+)

掌握这些JDK原生注解,不仅能写出更规范、更安全的代码,还能为后续学习Spring等框架的注解机制打下坚实基础。

Java基础|详解JDK自定义注解 在 Java 开发中,自定义注解(Annotation)是一种元编程机制,广泛用于框架设计、代码增强(如 AOP)、参数校验、权限控制、日志埋点等场景。大型的框架工具,如都大量使用注解机制,一些我们熟知的第三方工具()也都是用了大量的注解机制来增强和扩展应用。一般来说,常见的自定义注解基本的语法包括● @Target 注解使用的目标(类、方法、字段等)● @Retention 保留策略(源码、类文件、运行时)● @Documented 是否包含在 Javadoc 中。 阅读详情

相关推荐

Amesim(五):单个悬架系统搭建

一、组成 单个悬架系统组成包括:端子,质量块*2,弹簧,阻尼器,速度路面反馈,路面激励。 二、搭建 打开Amesim,在 library 选择 1D Mechanical 选择质量模块,添加到skech中,并按 ctrl+r 旋转质量块,将箭头朝上,设置规定的力传递正方向 添加弹簧阻尼器,与质量块连接 添加VX模块,将路面的激励传递转化为速度和位移,传递给悬架系统 在...

林小川的博客 7166

JDK内置的基本注解——详解

使用Annotation时要在其前面增加@符号,并把该Annotation当成一个修饰符来用。用于修饰它支持的程序元素三个基本的Annotation限定某个方法,是重写父类方法,该注解只能用于方法Override使用说明①. @Override表示指定重写父类的方法(从编译层面验证),如果父 类没有fly方法,则会报错②. 如果不写@Override注解,而父类仍有public void fly(){},仍然构成 重写③. @Override只能修饰方法,不能修饰其他类,包,属性等等。...

m0_61943950的博客 958

Loupe Browser实战指南:解锁10xGenomics单细胞数据的可视化奥秘

本文提供了Loupe Browser的实战指南,帮助用户无需编程即可探索和可视化10xGenomics单细胞数据。文章详细介绍了从数据导入、界面导航到细胞亚群鉴定、差异基因分析的核心操作流程,并分享了高级技巧与避坑指南,是快速上手这一强大可视化工具的必备参考。

weixin_29313423的博客 206

JDK中的注解

注解的基本知识

maojian_ohhey的博客 1169

用STM32L552驱动AD9102:一个硬件工程师的实战避坑指南(附完整代码)

本文详细介绍了如何使用STM32L552微控制器驱动AD9102任意波形发生器芯片,从硬件设计到波形生成的完整实战指南。内容包括电源架构、时钟电路设计、输出调理电路等关键硬件设计要点,以及软件驱动架构、波形存储优化和典型波形生成实例。通过实战经验分享,帮助硬件工程师避开常见设计陷阱,提升开发效率。

weixin_30889885的博客 333

PaddleOCR实战:从零开始打造专属OCR模型的完整指南

本文提供了一份从零开始使用PaddleOCR打造专属OCR模型的完整实战指南。内容涵盖环境搭建、数据标注与准备、模型训练与调优,以及最终的模型转换与部署。重点介绍了如何利用PaddleOCR进行模型训练,并整合PPOCRLabel等工具高效准备数据集,帮助开发者快速构建适用于特定场景的高精度OCR识别能力。

rl6adventurer的博客 732

JDK注解

@SuppressWarning:压制警告。() 一般传递参数all @SuppressWarning(“all”)*@Override:检测被该注解标记的方法是否是继承自父类(接口)的。*Annotation接口:所有注释类型扩展的共公接口。*@Depre cated:该注解表示的内容已经过时。public @interface 注解名称{}注解本质:是一个接口,该接口默认继承Annotation接口。*属性:接口中可以定义的成员方法。

weixin_58441135的博客 630

CANFD加速是什么?和CANFD有什么区别?

在使用CAN设备上位机的时候,已经选择了CANFD,但还有一个选项是“CANFD加速”,那CANFD加速和不加速有什么区别呢?刚接触CANFD小伙伴肯定一脸懵,本篇主要是给大家分享一下他们的区别,如果对你有帮助,请转发,收藏,点赞💐🎉👍😊

汽车电子软件领域知识分享 1025

JDK常见的注解

JDK常见的注解: @Override: 表示注解修饰的方法必须满足重写的规则 @Deprecated: 表示成员过时,编译器可以在程序运行的时候获取到该注解 @SupressWarnings: 表示忽略编译器的警告 @FunctionalInterface: 表示该接口是一个函数式接口,并且可以作为Lambda表达式参数传入 函数式接口:只有一个抽象方法的接口 注解的分类...

wulasong的博客 1090

微信小程序 - 解决微信支付报错 requestPayment:fail no permission 原因分析及排查处理(支付失败出错,无法唤起支付弹框面板,微信支付API报错请求付款:失败无权限)

微信小程序,微信支付,支付报错,errMsg: "requestPayment:fail no permission",支付失败,支付权限没问题,微信小程序支付报错,检查了appid正确依旧不行,微信小程序支付异常,苹果ios手机,安卓手机,开发者工具模拟器,最新解决教程,小程序wx.requestPayment报错/无响应,小程序支付 requestPaym,微信小程序认证,真机运行,小程序微信支付提示错误,微信小程序里使用微信支付错误提示,微信小程序支付异常,微信支付弹框拉不起来,小程序支付api,都检

🏆 前端领域优质创作者 1万+

Qwen2.5-VL多模态微调超参数深度解析(上):训练流程与优化策略的量化机制分析

上篇文章通过系统化的对比实验,回答了多模态微调中的三个基础问题:“选什么方法”(LoRA/Full/Freeze/OFT对比)、“用什么配置”(60+组超参数组合)、“达到什么效果”(ROUGE-L/BLEU-4指标)。这些结果为后续工作奠定了实验基线,但也留下了更深层的疑问:为何相同方法在不同数据集上表现迥异?为何某些超参数的微小调整会引发性能剧变?如何在未见过的任务上快速找到最优配置?本文是对前文实验数据的二次挖掘与机理解析。我们将关注点从"做了什么实验"转移到"实验揭示了什么规律",实验视角从"结果对

羊城迷鹿的博客 1003

Java 原生注解

Java 原生注解 注解(Annotation),元数据(Meta data)的一种形式,提供了程序本身之外的数据。是从jdk1.5才引入的特性,注解与类、接口、枚举在同一个层次,并可以应用于包、类型、构造方法、方法、成员变量、参数、本地变量的声明中。 @PostConstruct 注解 该注解被用来修饰一个非静态的 void()方法。被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次,是在构造函数之后执行,init()方法之前执行。 通常我们会是在Sp

探索er的博客 918

网络工程师教程第6版(2024年最新版)

本书 根据《网络工程师考试大纲》(2024年审定通过)编写,对网络工程师岗位所要求的主要知 识及应用技术进行了阐述。本书主要内容包括数据通信、局域网、无线通信网、网络互连、网络安全、网络操作系统与应用服务器、组网技术、网络管理、网络规划和设计。本书是参加网络工程师考试的必备教材,也可作为网络工程从业人员学习网络技术的教材或日常工作的参考用书。王涛和严体华编写了第2章、第3章和第4章;网络工程师教程(第6版)由清华大学出版社出版,由工业和信息化部教育与考试中心组编,张永刚、王涛、高振江任主编,具体介绍如下。

鹿鸣天涯 6901

Java常用注解(Annotation)详解汇总

元注解(用来修饰注解的注解) @Target(Elemetn.) 注解对谁有效 取值(ElementType)有:     1.CONSTRUCTOR:用于描述构造器     2.FIELD:用于描述域     3.LOCAL_VARIABLE:用于描述局部变量     4.METHOD:用于描述方法     5.PACKAGE:用于描述包     6.PARAMETER:用于描述参数     7.TYPE:用于描述类、接口(包括注解类型)或enum声明 @Retention(RetentionPoli

布诺的博客 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

常用注解详解

java中常用的注解分三类: 1.JDK注解 2.Java第三方注解 3.自定义注解 JDK注解 1.类注解 2.类变量注解 3.方法注解 @Override 表示当前方法覆盖了父类的方法 @Deprecation 表示方法已经过时,方法上有横线,使用时会有警告。 @SuppviseWarnings 表示关闭一些警告信息(通知java编译器忽略特定的编译警告) Java第三方注解 Sprin...

qq_40321119的博客 1018

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Java注解详解

什么是注解,为什么用注解,Java的常用注解?

程序员小杨哥的博客 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Java中常用注解

注解总结 1.说明 注解可以增强Java代码,利用反射技术可以扩充实现很多功能,被广泛应用于三大框架底层。 传统我们通过xml文本文件声明方式(但是XML比较繁琐且不易检查),而现在最主流的开发都是基于注解方式,代码量少,框架可以根据注解去自动生成很多代码,从而减少代码量,程序更易读。例如最火爆的SpringBoot就完全基于注解技术实现。 2.注解分类 JDK自带注解 元注解 自定义注解 2.1JDK注解 @Override :用来标识重写方法 @Deprecated标记就表明这个方法已经过时了,但我

qq_45932374的博客 3343

JDK注解详解

1.JDK:@SuppressWarnings 告诉编译器忽略指定警告,不用在编译完成后出现警告信息 @SuppressWarnings("unchecked") 告诉编译器忽略 unchecked 警告信息,如使用List,ArrayList等未进行参数化产生的警告信息。 @SuppressWarnings("serial") 如果编译器出现这样的警告信息:The serializ...

anjunshuang 366

java jdk自带注解_Java原生注解和Spring注解的说明

注解java 原生注解Spring 中的注解一 Java原生注解Java注解是在JDK1.5以后引入的新特性!有利于代码的解藕、整洁,提升开发的效率!通俗来讲,注解就是标签,标签的内容可以变动!注解也是java中的一种数据类型!注解的创建和接口的创建很类似!使用@Interface修饰!JDK本身自带的几种原生注解!也就是我们常说的元注解,原生注解是用于修饰自定义注解!JVM规范规定自定义注解必须...

weixin_42321075的博客 1053

java或Java框架中常用的注解及其作用详解

前言:由于在第一次面试中吃了暗亏,考到了SpringMVC的@RequestMapping和@ResponseBody的作用?我没复习到结果就被问得哑口无言!事后感觉甚是羞愧!在用ssm框架时只知道这些标签是传输数据用的,没有这些注解就无法获得数据,当时教Java的老师也是这么解释的!为了防止再次出现这种窘况!我决定上网找资料整理一下也方便复习时能用上。 **java中常用的注解分三类: 1....

天谴残魂的博客 2万+

(25)Jdk中的常用注解————概念及应用

JDK内置的三个基本注解 1, @Override:限定重写父类方法,该注解只能用于方法 2, @Deprecated:用于表示所修饰的元素(类,方法等)已过时。通常是因为所修饰的结构危险 3, @SuppressWarnings:抑制编译器警告 jdk提供的4种元注解 元注解:对现有的注解进行解释说明的注解 1,Retention(常用) @Retention:只能用于修饰一个Annotatio...

qq_2533491534的博客 845

[Java基础] 常用注解

java常用注解 元注解 spring注解

心流时间的博客 961

转载:Java常用注解(Annotation)详解汇总

注解其实就是代码里的特殊标记,它用于替代配置文件,有了注解技术后,开发人员可以通过注解告诉类如何运行。通过。

weixin_43889767的博客 2244

Java注解和JDK新特性

/ 如果有只有一个配置参数,一般命名为value定义注解的关键字是@interface自定义注解中可以定义多个配置参数,不是成员方法或成员变量;说明参数的名称,以及参数值的类型如果只有一个配置参数,一般命名为value如果配置参数是value,并且只有一个配置参数,value可省略注意:定义注解时,意味着他实现了java.lang.annotation.Anntotation接口,即该注解就是一个Anntotation和implements实现接口的方法不同。

小小前端转型中 1515

Java常用注解及其所属框架

Java 原生注解是基础,仅提供语法校验、标记等核心功能,无业务逻辑关联;Spring 生态注解(Core/MVC/Boot)是开发核心,覆盖依赖注入、请求映射、自动配置等绝大部分业务场景;持久层注解分两大方向:MyBatis 侧重 “注解式 SQL”,JPA/Hibernate 侧重 “ORM 映射”;Lombok 注解仅用于简化代码编写,不影响业务逻辑。

2502_92141759的博客 1789
上一篇: SELECT 的查询优化方案有哪些?
下一篇: Linux 内核、常见 Linux 发行版详解文档
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值