`@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 是什么?

@interface 是 Java 语言内置的语法 ,用于声明自定义注解,这不是 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 的注解机制实现的
相关推荐
SL_staff1 分钟前
BI落地失败的3个技术断点:从数据接入、自助分析到服务闭环的工程实践
java·数据分析·数据可视化
大风起兮云飞扬丶5 分钟前
Java——线程池
java·开发语言
文丑颜不良啊1 小时前
LeetCode276~300题目解析
java·leetcode
Vegetable_xu1 小时前
Spring Bean 循环依赖:为什么有时能过、有时启动就挂
java·spring·mybatis
avi91112 小时前
【AI教人】在Inspector显示所有Delegate-Odin Inspector之三
java·前端·算法·delegate·inspector·editor扩展·unity editor
青春不朽5122 小时前
Python 的 list append 为什么是均摊 O(1)?拆开过度分配那张表,看容量翻倍背后的暗账
java·python·list
小羊没烦恼!3 小时前
.NET 11 Runtime Async 详解
java·运维·开发语言·javascript·python
哇嘎呀3 小时前
RHCSA题目
java·服务器·前端
SL_staff3 小时前
企业知识平台细粒度权限设计实践:从成员组、文档库到操作级的三层防线
java·开源·全栈
周厉3 小时前
ERP系统全景解析:核心模块与业务逻辑框架
java·服务器·前端