Java用 @interface 注解N{ } 定义一个注解 @注解N,一个注解是一个类。
@Override,@Deprecated,@SuppressWarnings为常见的3个注解。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface NativeQuery {
String value() default "";
boolean pagable() default false;
boolean withGroupby() default false;
Class<?> model() default DEFAULT.class;
Class<? extends ColumnTranslator> translator() default DummyColumnTranslator.class;
String[] alias() default {};
Class<?>[] clazzes() default {};
public static final class DEFAULT {}
}
注解@Retention 可以用来修饰注解,是注解的注解,称为元注解。
Retention注解有一个属性value,是RetentionPolicy类型的,Enum RetentionPolicy是一个枚举类型,
这个枚举决定了Retention注解应该如何去保持,也可理解为Rentention 搭配 RententionPolicy使用。RetentionPolicy有3个值:CLASS RUNTIME SOURCE
用@Retention(RetentionPolicy.CLASS)修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,但不会被虚拟机读取在运行的时候;
用@Retention(RetentionPolicy.SOURCE )修饰的注解,表示注解的信息会被编译器抛弃,不会留在class文件中,注解的信息只会留在源文件中;
用@Retention(RetentionPolicy.RUNTIME )修饰的注解,表示注解的信息被保留在class文件(字节码文件)中当程序编译时,会被虚拟机保留在运行时,
所以他们可以用反射的方式读取。RetentionPolicy.RUNTIME 可以让你从JVM中读取注解N注解的信息,以便在分析程序的时候使用.
注解@Target 也是用来修饰注解的元注解,它有一个属性ElementType也是枚举类型,
值为:ANNOTATION_TYPE CONSTRUCTOR FIELD LOCAL_VARIABLE METHOD PACKAGE PARAMETER TYPE
如@Target(ElementType.METHOD) 修饰的注解表示该注解只能用来修饰在方法上。
@Target:指定程序元定义的注释所使用的地方,它使用了另一个类:ElementType,是一个枚举类定义了注释类型可以应用到不同的程序元素以免使用者误用。看看java.lang.annotation
ElementType是一个枚举类型,指明注释可以使用的地方,看看ElementType类:
public enum ElementType {
TYPE, // 指定适用点为 class, interface, enum
FIELD, // 指定适用点为 field
METHOD, // 指定适用点为 method
PARAMETER, // 指定适用点为 method 的 parameter
CONSTRUCTOR, // 指定适用点为 constructor
LOCAL_VARIABLE, // 指定使用点为 局部变量
ANNOTATION_TYPE, //指定适用点为 annotation 类型
PACKAGE // 指定适用点为 package
}
/**
* Created by hailong on 2016/11/21.
*/
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
String hello() default "gege";
String world();
int[] array() default { 2, 4, 5, 6 };
Class style() default String.class;
}
@MyAnnotation(hello = "beijing", world="shanghai",array={},style=int.class)
public class MyTest {
@MyAnnotation(world = "shanghai",array={1,2,3})
@Deprecated
@SuppressWarnings("")
public void output()
{
System.out.println("output something!");
}
}
public class MyReflection {
public static void main(String[] args) throws Exception
{
MyTest myTest = new MyTest();
Class<MyTest> myTestClass = MyTest.class;
// 方法
Method method = myTestClass.getMethod("output", new Class[] {});
// 如果MyTest类名上有注解@MyAnnotation修饰,则为true
// 类
if(MyTest.class.isAnnotationPresent(MyAnnotation.class))
{
System.out.println("have annotation");
}
if (!method.isAnnotationPresent(MyAnnotation.class)) {
} else {
method.invoke(myTest, null); //调用output方法
//获取方法上注解@MyAnnotation的信息
MyAnnotation myAnnotation = method.getAnnotation(MyAnnotation.class);
String hello = myAnnotation.hello();
String world = myAnnotation.world();
System.out.println(hello + ", " + world);//打印属性hello和world的值
System.out.println(myAnnotation.array().length);//打印属性array数组的长度
System.out.println(myAnnotation.style());
}
//得到output方法上的所有注解,当然是被RetentionPolicy.RUNTIME修饰的
Annotation[] annotations = method.getAnnotations();
for (Annotation annotation : annotations)
{
System.out.println(annotation.annotationType().getName());
}
}
}
设定类属性值后,在框架里会有class用反射机制设定具体方法实现方式。
分享到:
相关推荐
java @interface 注解详解及实例 Java 中的注解(Annotation)是从 Java 5 开始引入的一种特殊类型的接口,它可以在编译时、类加载时或运行时被读取,并且可以被用来生成描述信息、强制编译检查、.runtime ...
Java注释的引入源于JSR175,这是一个元数据设施,目的是允许类、接口、字段和方法被标记以表明特定属性。元数据是在实际数据之上附加的信息,比如在Java中,`final`关键字就是一个元数据,它表明类不能被继承。通过...
Java 注释编码的知识点涵盖了Java注解(Annotations)的基本概念、语法、使用场景以及与Java SE 8的变化。注解是Java SE 5引入的一个特性,用于为Java代码提供元数据。这些元数据可以被编译器读取,也可以用于运行时...
当子类的方法声明使用此注释时,编译器将检查是否有对应的超类方法可以重写,如果没有,则会产生编译错误。 ##### 2.3 `@Deprecated`注释 `@Deprecated`注释用于标记那些不推荐使用的方法或类,表明它们可能在未来...
为了增强代码的可读性和避免误用,Java允许通过`ElementType`枚举来限制注释的适用范围,如仅限于方法、字段、类型等。例如,可以规定`@Greeting`只能应用于方法上: ```java @Target(ElementType.METHOD) public @...
### JDK注释详解:深入理解Java中的注解 在Java开发中,注解(Annotation)是一种重要的元数据机制,用于向编译器、工具或框架提供额外的信息,从而增强代码的功能性和可读性。本文将从JDK源注释出发,深入解析三种...
Java的反射API允许在运行时检查类、接口、字段和方法的元数据,包括它们的注解。通过`java.lang.reflect.AnnotatedElement`接口,可以获取关于注解的信息。 ### 6. 自定义注解的源代码分析 创建自定义注解通常涉及...
在Java中,你可以通过`@interface`关键字来定义一个注解。注解包含元素(也称为成员),这些元素可以有默认值,也可以接受参数。例如,我们可以定义一个名为`@GenerateTable`的注解,它可能包含`tableName`和`...
- **声明注解**:使用 `@interface` 关键字来声明一个注解。 ```java public @interface MyAnnotation { String value() default ""; } ``` - **使用注解**:通过 `@注解名称` 的形式将注解应用到类、方法或...
Java 注解的作用和实现 Java 中的注解(Annotation)是一种元数据,提供了一种灵活的方式来处理代码中的元数据。...通过这个例子,我们可以看到如何定义和使用自己的注解类型,并使用它们来注释 Java 代码。
一、Java注释类型 Java提供了三种主要的注释类型: 1. 单行注释:以`//`开头,用于简单的单行注释。 ```java // 这是一个单行注释,通常用于快速添加临时或简洁的说明 ``` 2. 多行注释:以`/*`开始,以`*/`结束,...
### Java高级知识点:标注(Annotation) #### 一、概述 在Java编程语言中,标注(Annotation)是一项重要的特性,自JDK 5.0引入以来,极大地丰富...理解和掌握标注的使用方法,对于成为一名优秀的Java开发者至关重要。
当这个注解应用于控制器方法的参数时,一个拦截器会在执行方法之前解析这个注解,从请求头中提取JWT令牌,验证它,然后从Redis中获取用户信息并将其放入请求域中供后续方法使用。 此外,还可以创建一个限制接口使用...
总结,掌握Java API的使用和编写清晰的注释是成为一名合格的Java程序员,特别是在大数据领域,必不可少的技能。通过熟练应用API,可以有效地利用已有的功能,而恰当的注释则能够提升代码质量,使得团队协作更加高效...
在给定的压缩包文件中,可能包含了多个Java文件,每个文件展示了如何使用注解来注解类、方法和属性。通过学习和运行这些示例,你可以更深入地理解Java注解的使用方式和它们在实际项目中的应用。对于初学者,这是一个...
遵循Javadoc规范,开发者可以轻松地理解代码功能和使用方法。 1. Javadoc 基本结构与使用: Javadoc注释使用`/**`开始,以`*/`结束,通常用于类、接口、方法和字段的注释。例如,在方法签名前添加Javadoc,以便为...
这篇博客“使用annotation获取实体类注释”主要探讨了如何利用注解来增强代码的可读性和可维护性,同时介绍了如何从实体类中获取已定义的注解信息。以下是关于这个主题的一些关键知识点: 1. **注解定义**:注解以`...
通过使用标注,开发者能够更方便地对代码进行注释,并且这些注释可以被编译器或运行时工具所读取和处理。Java语言本身提供了几种内置的标注类型,比如`@Override`用于标记重写的方法,`@Deprecated`用于标记废弃的...