1. @Retention注解指定了标记的注解如何存储:
@Retention(RetentionPolicy.RUNTIME)
public @interface Controller {
}
RetentionPolicy.SOURCE,标记的注解仅保留在源代码级别,并被编译器忽略。
RetentionPolicy.CLASS,标记的注解在编译时由编译器保留,但被Java虚拟机(JVM)忽略。
RetentionPolicy.RUNTIME,标记的注解由JVM保留,以便运行时环境可以使用。
2. @Documented注解指示每当使用指定的注解时,应使用Javadoc工具记录这些元素。
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Controller {
}
3. @Target注解标记了另一个注解,以限制该注解可以应用于哪种Java元素。@Target注解指定以下元素类型之一作为其值:
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target(ElementType.ANNOTATION_TYPE)
public @interface Controller {
}
ElementType.ANNOTATION_TYPE,可以应用于注解类型。
ElementType.CONSTRUCTOR,可以应用于构造函数。
ElementType.FIELD,可以应用于字段或属性。
ElementType.LOCAL_VARIABLE,可以应用于局部变量。
ElementType.METHOD,可以应用于方法级注解。
ElementType.PACKAGE,可以应用于包声明。
ElementType.PARAMETER,可以应用于方法的参数。
ElementType.TYPE,可以应用于类的任何元素。
那么如果我们想让一个自定义的注解既能够在方法上面用,也能在类上面用就可以这样定义
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface RequestMapping {
}
4. @Inherited注解表示该注解类型可以从超类继承(默认情况下并非如此)。当用户查询注解类型并且该类没有该类型的注解时,将查询该类的超类以获取注解类型。此注解仅适用于类声明。
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Target(ElementType.ANNOTATION_TYPE)
@Inherited
public @interface Controller {
}
5. @Repeatable注解是JavaSE8中引入的,表示标记的注解可以多次应用于同一声明或类型使用。
实际应用
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Controller {
}
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD,ElementType.TYPE})
public @interface RequestMapping {
String[] value() default{};
}
测试注解文章来源:https://www.toymoban.com/news/detail-602443.html
@Controller
@RequestMapping("/hello")
public class TestController {
}
如果加上上面两个注解不会爆红,就说明没有问题文章来源地址https://www.toymoban.com/news/detail-602443.html
到了这里,关于java 元注解||自定义注解的使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!