美文网首页
Java注解与反射

Java注解与反射

作者: ChanHsu | 来源:发表于2023-02-14 15:19 被阅读0次

1.自定义注解

// 自定义注解
@Target(value = {ElementType.METHOD, ElementType.TYPE})// 使用范围:方法
@Retention(RetentionPolicy.RUNTIME)// 作用域:运行时有效
@Documented // 可以被抽取到API文档中
@Inherited // 可以被子类继承。
@interface MyAnnotation {
    // 注解的参数:参数类型 + 参数名();
    String name() default "";// 需要输入一个String类型,不输入默认空字符串。
    String value() default "";// 需要输入一个String类型,不输入默认空字符串。
}

@MyAnnotation
public class UserAnnotation {
    @MyAnnotation(name= "name1")
    public static void oldMethod() {
        System.out.println("old method, don't use it.");
    }
    
    @MyAnnotation(name="name2",value="value1")
    public static void genericsTest() throws FileNotFoundException {
        List<String> l = new ArrayList<>();
        l.add("abc");
        oldMethod();
    }
}
public class AnnotationParsing {
    public static void main(String[] args) {
        try {
            Class<?> loadClass = AnnotationParsing.class
                    .getClassLoader()
                    .loadClass("com.gs.UserAnnotation");
            if (loadClass.isAnnotationPresent(MyAnnotation.class)) {
                Annotation[] declaredAnnotations = loadClass.getDeclaredAnnotations();
                for (Annotation annotation : declaredAnnotations) {
                    System.out.println("Annotation in class '" + annotation);
                }
            }
            
            for (Method method : loadClass.getMethods()) {
                // checks if MethodInfo annotation is present for the method
                if (method.isAnnotationPresent(MyAnnotation.class)) {
                    try {
                        // iterates all the annotations available in the method
                        for (Annotation anno : method.getDeclaredAnnotations()) {
                            System.out.println("Annotation in Method '"
                                    + method + "' : " + anno);
                        }
                        MyAnnotation methodAnno = method.getAnnotation(MyAnnotation.class);
                        if (methodAnno.product().equals("001")) {
                            System.out.println("Method with product is 001 = "+ method);
                        }
 
                    } catch (Throwable ex) {
                        ex.printStackTrace();
                    }
                }
            }
        } catch (SecurityException | ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

相关文章

  • 博客地址

    java注解-01、java注解-02、Git面试资源java反射-01、java反射-02、java反射-03为...

  • Java基础:反射

    反射注解动态代理相关阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 ...

  • Spring注解原理探索(三)

    之 Java如何识别注解 关键词:Java 反射java.lang.reflect 包,实现反射功能的工具类。注解...

  • Java中的注解和反射

    个人博客http://www.milovetingting.cn Java中的注解和反射 注解 Java注解(An...

  • 注解反射以及动态代理

    注解与反射以及动态代理 注解 注解的定义 Annotation(注解)就是Java提供了一种元程序中的元素关联任何...

  • JAVA反射与注解

    前言 现在在我们构建自己或公司的项目中,或多或少都会依赖几个流行比较屌的第三方库,比如:Butter Knife、...

  • java注解与反射,泛型与反射

    一、反射与注解 内置注解 java内置了3种注解,用来为编译器提供检查。 自定义注解 元注解 元注解是用来修饰注解...

  • 【阿里P8大牛教你Android入门之路(java篇)】——Ja

    一、前言 本部分内容主要包含以下: Java集合 Java反射 Java注解 Java反射 Java IO 其他面...

  • Java 注解(四)注解与反射

    注解与反射机制前面经过反编译后,我们知道Java所有注解都继承了Annotation接口,也就是说Java使用An...

  • Java基础:注解

    系列阅读 Java基础:类加载器 Java基础:反射 Java基础:注解 Java基础:动态代理 1. 概述 注解...

网友评论

      本文标题:Java注解与反射

      本文链接:https://www.haomeiwen.com/subject/eexiattx.html