`@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 的注解机制实现的
相关推荐
_日拱一卒17 分钟前
LeetCode:994腐烂的橘子
java·数据结构·算法·leetcode·深度优先
隔窗听雨眠23 分钟前
Nginx网关响应慢排查手记
java·服务器·nginx
智慧物业老杨1 小时前
智慧物业合同周期管理系统:从风险预警到智能交接的全流程数智化落地方案
java·人工智能·python
源码宝1 小时前
MES系统源码:Java8 + SpringBoot2.7 + MySQL8 + Redis,后端源码清爽易扩展
java·后端·源码·springboot·mes系统·源码二开·mes源码
JAVA社区2 小时前
Java高级全套教程(十)—— SpringCloudAlibaba超详细实战详解
java·开发语言·spring cloud·面试·职场和发展
金銀銅鐵2 小时前
[Java] 如何理解 class 文件中方法的 descriptor?
java·后端
云烟成雨TD2 小时前
Spring AI Alibaba 1.x 系列【63】AI Agent 长期记忆
java·人工智能·spring
憧憬成为java架构高手的小白2 小时前
苍穹外卖--day09
java·spring boot·百度
学代码的真由酱2 小时前
Java多用户一对一网页聊天室-测试报告
java·开发语言·功能测试·测试
Jasonakeke3 小时前
SpringBoot自动配置原理揭秘
java·spring boot·后端