自定义注解
1 2 3 4 5 6
| 修饰符 @interface 注解名{ 数据类型 属性名()
数据类型 属性名() default 默认值 }
|
1 2 3 4 5 6 7 8
| 元注解@Target @Retention 用来注解自定义注解 是用在自定义注解的注解 @Target 约束自定义注解只能在哪些地方使用 TYPE... @Retention 申明注解的生命周期 SOURCE 只作用在源码阶段 CLASS(默认) 字节码文件,执行就没了 RUNTIME 一直存在
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @interface Book {
String name();
double price();
String madeBy() default "paper";
}
@Book(name = "hhh", price = 123) class parseTest{
@Book(name = "method", price = 334) private void test(){ System.out.println("test"); } }
|
1 2 3 4 5 6 7 8 9 10
| Annotation 是所有注解的父类 AnnotatedElement 定义了与注解解析相关的方法 所有Class、Method、。。。都实现了AnnotatedElement接口 都拥有解析注解的能力 1、Annotation[] getDeclaredAnnotations() 获得当前对象上使用的所有注解 2、T getDeclaredAnnotation(Class<T> annotationClass) 根据注解类型获得对应的注解对象 3、boolean isAnnotationPresent(Class<Annotation> annotationClass) 判断当前对象是否使用了指定的注解,使用了返回true
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| @Test public void test() throws NoSuchMethodException { Class parseTestClass = parseTest.class; if (parseTestClass.isAnnotationPresent(Book.class)){ Book book = (Book) parseTestClass.getDeclaredAnnotation(Book.class); System.out.println(book.name()); }
Method test = parseTestClass.getDeclaredMethod("test"); if (test.isAnnotationPresent(Book.class)){ Book b = test.getDeclaredAnnotation(Book.class);
System.out.println(b.name()); } }
|
https://juejin.cn/post/6844904167517995022
https://juejin.cn/post/6844904168491073543