文章目录
- 前言
-
- [`@interface` 解析](#
@interface解析) -
- [1. `@interface` 是什么?](#1.
@interface是什么?) - [2. 完整的 `@Select` 注解定义](#2. 完整的
@Select注解定义) - [3. 元注解解释(上面的注解都来自 Java)](#3. 元注解解释(上面的注解都来自 Java))
- [4. 自定义注解 vs 普通接口对比](#4. 自定义注解 vs 普通接口对比)
- [5. 如何使用自定义注解](#5. 如何使用自定义注解)
- [6. Java 内置注解完整列表](#6. Java 内置注解完整列表)
- [1. `@interface` 是什么?](#1.
- 总结
- [`@interface` 解析](#
前言
@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 |
可重复使用 |
总结
@interface是 Java 语言内置的语法,用于声明自定义注解@Documented、@Retention、@Target这些都来自java.lang.annotation包,是 Java 标准库的一部分- MyBatis 的
@Select注解就是使用 Java 的注解机制实现的