Java注解详解以及自定义注解实战
- 一、 注解简介
- 1. 注解表示:
- 2. 定义注解
- 3. 元注解
- 1. @Target
- 2. @Retention
- 3. @Documented
- 4. @Inherited
- 4. 注解的使用
- 二、自定义注解
- 1. 定义自定义注解
- 2. 在类中使用自定义注解
- 3. 处理注解信息
- 总结
本文记录一下Java注解以及自定义注解实战。
一、 注解简介
注解是一种用于在Java代码中添加元数据和标记信息
的特殊语法。注解可以用于提供程序的额外信息,帮助编译器、工具和框架进行特定的处理。
1. 注解表示:
使用 @
符号加上注解名称来表示,例如: @Override 、 @Deprecated 等。
2. 定义注解
可以通过 @interface
关键字来定义自定义注解。代码如下:
@interface Demo{
String value();
int number() default 0;
}
3. 元注解
元注解是用来注解其他注解
的注解,可以控制注解的行为和作用范围。常用的元注解包括 @Target 、 @Retention 、 @Documented 、 @Inherited 等。
1. @Target
用于指定注解可以应用的目标元素
类型。它包含一个ElementType类型的数组
,表示注解可以应用的目标类型。常见的目标类型包括 ElementType.TYPE
(类、接口、枚举)、 ElementType.METHOD
(方法)、 ElementType.FIELD
(字段)等。示例如下:
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface TargetAnnotation {
// attributes
}
2. @Retention
用于指定注解的保留策略,即注解在什么时候有效
。它包含一个RetentionPolicy
类型的属性,表示注解的保留策略。常见的保留策略包括 RetentionPolicy.SOURCE
(源码级别,编译后丢弃)、 RetentionPolicy.CLASS
(类级别,编译后保留在字节码中)、 RetentionPolicy.RUNTIME
(运行时级别,可以通反射
(关于反射详细可以看我的另一篇博文 java反射机制。示例如下:
@Retention(RetentionPolicy.RUNTIME)
public @interface RetentionAnnotation {
// attributes
}
3. @Documented
用于指定注解是否包含在Java文档中。如果一个注解被@Documented
注解,则它的信息会包含在生成的Java文档中 ,示例如下:
@Documented
public @interface DocumentedAnnotation {
// attributes
}
4. @Inherited
用于指定注解是否具有继承性
。如果一个注解被@Inherited
注解,则它的子类会继承该注解。通常用于标记注解,表示子类也应用该注解。例如:
@Inherited
public @interface InheritedAnnotation {
// attributes
}
4. 注解的使用
注解可以用于标记类、方法、字段等元素,也可以在运行时通过反射获取注解信息。
二、自定义注解
1. 定义自定义注解
首先,我们需要定义一个自定义注解,如下定义了一个 @MethodInfo 注解,表示方法的信息,包括方法名和作者名。
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME) //运行时有效
@Target(ElementType.METHOD) //作用在方法上
public @interface MethodInfo {
String author() default "Unknown";
String date();
int version() default 1;
}
2. 在类中使用自定义注解
然后,使用自定义注解 @MethodInfo ,标记一个方法,并在注解中提供方法的信息。
public class MyClass {
@MethodInfo(author = "author", date = "2024-01-01", version = 2)
public void myMethod() {
System.out.println("This is author method.");
}
}
3. 处理注解信息
通过反射
来处理注解信息,获取方法上的注解信息并进行相应的处理。
import java.lang.reflect.Method;
public class AnnotationExample {
public static void main(String[] args) {
MyClass myClass = new MyClass();
Class<?> clazz = myClass.getClass();
Method[] methods = clazz.getDeclaredMethods();
for (Method method : methods) {
if (method.isAnnotationPresent(MethodInfo.class)) { //判断是否被注解标注
MethodInfo methodInfo = method.getAnnotation(MethodInfo.class); //获取注解信息
System.out.println("Method Name: " + method.getName()); //Method Name: myMethod
System.out.println("Author: " + methodInfo.author()); //Author: author
System.out.println("Date: " + methodInfo.date()); //Date: 2024-01-01
System.out.println("Version: " + methodInfo.version()); //Version: 2
}
}
}
}
总结
本文记录一下Java注解以及自定义注解实战。
希望对看到本文的你有帮助。
上一篇 java反射机制 |
记得点赞收藏哦!!!
| 下一篇 java自定义注解属性详解 |