本篇文章给大家带来的内容是关于Java注解的定义及使用介绍(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
Java的注解在实际项目中使用得非常的多,特别是在使用了Spring之后。
本文会介绍Java注解的语法,以及在Spring中使用注解的例子。
注解的语法
注解的例子
以Junit中的@Test注解为例
@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface Test { long timeout() default 0L;}
可以看到@Test
注解上有@Target()
和@Retention()
两个注解。
这种注解了注解的注解,称之为元注解。
跟声明了数据的数据,称为元数据是一种意思。
之后的注解的格式是
修饰符 @interface 注解名 { 注解元素的声明1 注解元素的声明2 }
注解的元素声明有两种形式
type elementName();type elementName() default value; // 带默认值
常见的元注解
@Target
注解
@Target
注解用于限制注解能在哪些项上应用,没有加@Target
的注解可以应用于任何项上。
在java.lang.annotation.ElementType
类中可以看到所有@Target
接受的项
-
TYPE
在【类、接口、注解】上使用 -
FIELD
在【字段、枚举常量】上使用 -
METHOD
在【方法】上使用 -
PARAMETER
在【参数】上使用 -
CONSTRUCTOR
在【构造器】上使用 -
LOCAL_VARIABLE
在【局部变量】上使用 -
ANNOTATION_TYPE
在【注解】上使用 -
PACKAGE
在【包】上使用 -
TYPE_PARAMETER
在【类型参数】上使用 Java 1.8 引入 -
TYPE_USE
在【任何声明类型的地方】上使用 Java 1.8 引入
@Test
注解只允许在方法上使用。
@Target(ElementType.METHOD)public @interface Test { ... }
如果要支持多项,则传入多个值。
@Target({ElementType.TYPE, ElementType.METHOD})public @interface MyAnnotation { ... }
此外元注解也是注解,也符合注解的语法,如@Target
注解。@Target(ElementType.ANNOTATION_TYPE)
表明@Target
注解只能使用在注解上。
@Doc<strong style="color:transparent">来2源gaodaima#com搞(代@码&网</strong>umented@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.ANNOTATION_TYPE)public @interface Target { ElementType[] value();}
@Retention
注解
@Retention
指定注解应该保留多长时间,默认是RetentionPolicy.CLASS
。
在java.lang.annotation.RetentionPolicy
可看到所有的项
-
SOURCE
不包含在类文件中 -
CLASS
包含在类文件中,不载入虚拟机 -
RUNTIME
包含在类文件中,由虚拟机载入,可以用反射API获取
@Test
注解会载入到虚拟机,可以通过代码获取
@Retention(RetentionPolicy.RUNTIME)public @interface Test { ... }
@Documented
注解
主要用于归档工具识别。被注解的元素能被Javadoc
或类似的工具文档化。
@Inherited
注解
添加了@Inherited
注解的注解,所注解的类的子类也将拥有这个注解