`@interface` 解析

文章目录

  • 前言
    • [`@interface` 解析](#@interface 解析)
      • [1. `@interface` 是什么?](#1. @interface 是什么?)
      • [2. 完整的 `@Select` 注解定义](#2. 完整的 @Select 注解定义)
      • [3. 元注解解释(上面的注解都来自 Java)](#3. 元注解解释(上面的注解都来自 Java))
      • [4. 自定义注解 vs 普通接口对比](#4. 自定义注解 vs 普通接口对比)
      • [5. 如何使用自定义注解](#5. 如何使用自定义注解)
      • [6. Java 内置注解完整列表](#6. Java 内置注解完整列表)
    • 总结

前言

@interface 解析

1. @interface 是什么?

@interfaceJava 语言内置的语法 ,用于声明自定义注解,这不是 MyBatis 特有的,是 Java 语言自带的特性。

java 复制代码
// 声明自定义注解的语法
public @interface Select {
    // 注解属性定义
    String[] value();
}

2. 完整的 @Select 注解定义

java 复制代码
package org.apache.ibatis.annotations;

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

@Documented
@Retention(RetentionPolicy.RUNTIME)  // 注解保留策略:运行时
@Target({ElementType.METHOD})  // 注解使用目标:方法上
public @interface Select {
    String[] value();  // 注解属性
}

3. 元注解解释(上面的注解都来自 Java)

元注解 含义 说明
@Documented 文档化 使用此注解的注解会被 javadoc 文档化
@Retention 保留策略 注解保留到什么时候: - SOURCE: 仅源码 - CLASS: 编译到 class 文件 - RUNTIME: 运行时保留(通过反射读取)
@Target 作用目标 注解可以用在什么地方: - TYPE: 类/接口 - METHOD: 方法 - FIELD: 字段 - 等等

这些元注解全部来自 java.lang.annotation,是 Java 标准库的一部分!


4. 自定义注解 vs 普通接口对比

java 复制代码
// 普通接口
public interface MyInterface {
    void method();
}

// 自定义注解
public @interface MyAnnotation {
    String value();
    int number() default 0;
}

区别

  • 普通接口使用 interface 关键字
  • 自定义注解使用 @interface 关键字

5. 如何使用自定义注解

java 复制代码
// 在方法上使用 @Select 注解
@Select("SELECT * FROM table WHERE id = #{id}")
public List<Entity> selectById(Long id);

// 在字段上使用自定义注解
@MyAnnotation(value = "test", number = 100)
private String field;

6. Java 内置注解完整列表

注解 用途
@Override 标记重写方法
@Deprecated 标记已弃用
@SuppressWarnings 抑制警告
@FunctionalInterface 标记函数式接口
@SafeVarargs 抑制可变参数警告
@Documented 文档化
@Retention 保留策略
@Target 作用目标
@Inherited 注解可继承
@Native 标记 native 常量
@Repeatable 可重复使用

总结

  1. @interface 是 Java 语言内置的语法,用于声明自定义注解
  2. @Documented@Retention@Target 这些都来自 java.lang.annotation,是 Java 标准库的一部分
  3. MyBatis 的 @Select 注解就是使用 Java 的注解机制实现的
相关推荐
莫得感情 o13 分钟前
踩坑 - 压测三轮后 502:一个默认 10 的连接池如何拖垮整个服务
java
Escalating_xu14 分钟前
【Linux线程】线程控制全解析:终止、join/detach、cancel、线程栈与 NPTL(下篇)
java·linux·运维
2602_9599609224 分钟前
电商大厂Java面试实录:Spring Boot/JVM/Redis/Kafka/微服务/安全/测试全解析
java·jvm·spring boot·redis·面试题
吃饱了得干活40 分钟前
限界上下文之后:微服务怎么拆、上下文怎么聊?
java·后端·架构
yngsqq1 小时前
窗体快速取消
java·开发语言
岁月如歌77861 小时前
一次讲透 Redis 缓存击穿、穿透、雪崩,从原理到实战解决方案
java·后端·架构
AI多Agent协作实战派2 小时前
AI多Agent协作系统实战(四十六):改了十次规则,AI员工还是老样子——会话缓存的坑
java·spring·缓存
一知半解仙2 小时前
当机器人学会泛化,而我在写Java:一名后端开发者的2026年8月21日观察手记
java·开发语言·机器人
葡萄成熟时 !10 小时前
JAVA 常用API学习笔记
java·笔记·学习
Rain的Java大神之路11 小时前
介绍一下分布式事务
java·分布式·后端·spring·spring cloud·架构·springcloud