`@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 的注解机制实现的
相关推荐
吴声子夜歌6 小时前
Java——字符编码
java·字符编码·char
冷小鱼6 小时前
多线程编程深度解析:Java与Python框架实战指南
java·开发语言·python·多线程
java1234_小锋6 小时前
Spring AI 2.0 开发Java Agent智能体 - 结构化输出
java·人工智能·spring
asdfg12589636 小时前
Java 大型项目设计的“内功心法”---面向对象和接口编程
java·开发语言
ch.ju6 小时前
Java programming Chapter Three——Array
java·开发语言
努力努力再努力wz6 小时前
【Qt入门系列】第一个 Qt Widgets 程序:项目创建、UI 文件、Hello World、对象树与 qDebug 日志
java·c语言·开发语言·数据结构·c++·qt·ui
东南门吹雪6 小时前
Spring事务传播机制深度解析
java·数据库·spring
XS0301066 小时前
Java基础 List集合
java·windows·list
凤凰院凶涛QAQ6 小时前
《C++转Java快速入手系列》抽象类和接口篇
java·开发语言·c++