【Java 】 如何通过 反射 获取 注解信息 ?

简介: 在框架中如何通过 反射 获取到 类或方法 上的 注解信息

我们在设计框架的时候经常需要通过反射获取 类或方法 上的注解信息

比如在 Spring 中,我们需要在相应的类上添加 @Controller、@Servlet、@Component 等注解,从而让 Spring 生成 Bean

并且 我们还有必要在注解中添加信息

比如在 Contoller 中,我们需要往 @RequestMapping 中添加 url 信息,如下

@RequestMapping("/index")

这样 SpringMVC 才能正确映射 url 与 Controller 的关系

那么接下来,我们就一起学习下如何通过反射获取注解信息

判断元素上是否存在指定注解

  1. 先获取元素对象(类对象、方法对象)

  2. 调用 public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) 方法,参数是需要判断的注解

代码实例

            Class<?> cl = Class.forName("com.zhuyuanjie.AnnoDemo");

            if (cl.isAnnotationPresent(MyAnno.class)) {
   
                System.out.println("存在 @MyAnno注解 ");
            }

上面代码 判断 AnnoDemo类 上是否存在 @MyAnno 注解,有返回true,否者返回false

获取注解注解对象

有时候我们不能仅仅判断是否存在注解,还需要获取注解中的信息,那么就有必要取获取到注解对象了

获取步骤与前面相类似

  1. 先获取元素对象(类对象、方法对象)

  2. 调用 public <A extends Annotation> A getAnnotation(Class<A> annotationClass) 方法,获取到注解对象,还可以通过 getAnnotations 方法获取全部注解

代码实例

获取某个方法上的注解,并读取指定的信息

Class<?> cl = Class.forName("com.zhuyuanjie.AnnoDemo");
Method addMethod = cl.getMethod("add",String.class);
Annotation annotation = addMethod.getAnnotation(RequestMapping.class);
RequestMapping requestMapping = (RequestMapping) annotation;

上面我们就获取到了 AnnoDemo 类的 add 方法上的 @RequestMapping 注解对象

我们查看 RequestMapping 代码

@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({
   ElementType.TYPE, ElementType.METHOD})
public @interface RequestMapping {
   

    String value() default "";

}

发现它有一个 value 属性,我们可以直接通过 requestMapping.value() 获取到 value 的值

以上就是在框架中最常用到的 通过反射获取注解信息 的方法,希望对你有所帮助^-^

目录
相关文章
|
30天前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
64 7
|
11天前
|
Java 数据库连接 Spring
反射-----浅解析(Java)
在java中,我们可以通过反射机制,知道任何一个类的成员变量(成员属性)和成员方法,也可以堆任何一个对象,调用这个对象的任何属性和方法,更进一步我们还可以修改部分信息和。
|
1月前
|
Java 编译器 数据库
Java 中的注解(Annotations):代码中的 “元数据” 魔法
Java注解是代码中的“元数据”标签,不直接参与业务逻辑,但在编译或运行时提供重要信息。本文介绍了注解的基础语法、内置注解的应用场景,以及如何自定义注解和结合AOP技术实现方法执行日志记录,展示了注解在提升代码质量、简化开发流程和增强程序功能方面的强大作用。
82 5
|
2月前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
39 8
|
2月前
|
监控 Java
Java基础——反射
本文介绍了Java反射机制的基本概念和使用方法,包括`Class`类的使用、动态加载类、获取方法和成员变量信息、方法反射操作、以及通过反射了解集合泛型的本质。同时,文章还探讨了动态代理的概念及其应用,通过实例展示了如何利用动态代理实现面向切面编程(AOP),例如为方法执行添加性能监控。
|
2月前
|
人工智能 监控 数据可视化
Java智慧工地信息管理平台源码 智慧工地信息化解决方案SaaS源码 支持二次开发
智慧工地系统是依托物联网、互联网、AI、可视化建立的大数据管理平台,是一种全新的管理模式,能够实现劳务管理、安全施工、绿色施工的智能化和互联网化。围绕施工现场管理的人、机、料、法、环五大维度,以及施工过程管理的进度、质量、安全三大体系为基础应用,实现全面高效的工程管理需求,满足工地多角色、多视角的有效监管,实现工程建设管理的降本增效,为监管平台提供数据支撑。
53 3
|
2月前
|
Java 开发者 Spring
[Java]自定义注解
本文介绍了Java中的四个元注解(@Target、@Retention、@Documented、@Inherited)及其使用方法,并详细讲解了自定义注解的定义和使用细节。文章还提到了Spring框架中的@AliasFor注解,通过示例帮助读者更好地理解和应用这些注解。文中强调了注解的生命周期、继承性和文档化特性,适合初学者和进阶开发者参考。
68 14
|
2月前
|
Java 编译器 开发者
Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面
本文探讨了Java异常处理的最佳实践,涵盖理解异常类体系、选择合适的异常类型、提供详细异常信息、合理使用try-catch和finally语句、使用try-with-resources、记录异常信息等方面,帮助开发者提高代码质量和程序的健壮性。
86 2
|
2月前
|
Java
Java的反射
Java的反射。
39 2
|
2月前
|
Java 编译器
Java进阶之标准注解
Java进阶之标准注解
43 0