`@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 的注解机制实现的
相关推荐
学者猫头鹰8 小时前
Java 8 核心新特性
java
冰心孤城8 小时前
Excel: xls与xlsx格式转换排坑指南
java·前端·excel
自强的小白8 小时前
maven高级(聚合和私服)以及私服的上传和下载
java·maven
唐青枫8 小时前
Java ReentrantLock 实战详解:比 synchronized 更灵活的可重入锁
java
ShiXZ2139 小时前
Java 8 Stream API 实用技巧详解:从入门到精通
java·开发语言
C++、Java和Python的菜鸟10 小时前
第9章 后端Web进阶(AOP)
java·开发语言·前端
东北赵四10 小时前
关于Java泛型的知识点及其相关面试题
java·windows·python
姓蔡小朋友10 小时前
Java线程并发
java·开发语言·python
执笔画流年呀10 小时前
⾃动化测试常⽤函数
java·dubbo
疯狂打码的少年10 小时前
【面向对象】UML概述(基本构造块:事物/关系/图)
java