【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 的值

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

目录
相关文章
|
8天前
|
安全 Java 测试技术
🌟Java零基础-反射:从入门到精通
【10月更文挑战第4天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
13 2
|
18天前
|
安全 算法 Java
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
本文提供了在数据库中对密码等敏感信息进行加盐加密的详细教程,包括手写MD5加密算法和使用Spring Security的BCryptPasswordEncoder进行加密,并强调了使用BCryptPasswordEncoder时需要注意的Spring Security配置问题。
58 0
数据库信息/密码加盐加密 —— Java代码手写+集成两种方式,手把手教学!保证能用!
|
18天前
|
JSON Java 数据库
java 常用注解大全、注解笔记
关于Java常用注解的大全和笔记,涵盖了实体类、JSON处理、HTTP请求映射等多个方面的注解使用。
30 0
java 常用注解大全、注解笔记
|
27天前
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
30 1
|
29天前
|
域名解析 分布式计算 网络协议
java遍历hdfs路径信息,报错EOFException
java遍历hdfs路径信息,报错EOFException
31 3
|
6天前
|
IDE Java 编译器
java的反射与注解
java的反射与注解
6 0
|
1月前
|
Java 编译器 程序员
Java注解,元注解,自定义注解的使用
本文讲解了Java中注解的概念和作用,包括基本注解的用法(@Override, @Deprecated, @SuppressWarnings, @SafeVarargs, @FunctionalInterface),Java提供的元注解(@Retention, @Target, @Documented, @Inherited),以及如何自定义注解并通过反射获取注解信息。
Java注解,元注解,自定义注解的使用
|
15天前
|
XML Java 数据格式
Java-spring注解的作用
Java-spring注解的作用
15 0
|
监控 Java
Sigar java 服务器信息探针、监控
Sigar java 服务器信息探针、监控
285 0
|
4天前
|
安全 Java UED
Java中的多线程编程:从基础到实践
本文深入探讨了Java中的多线程编程,包括线程的创建、生命周期管理以及同步机制。通过实例展示了如何使用Thread类和Runnable接口来创建线程,讨论了线程安全问题及解决策略,如使用synchronized关键字和ReentrantLock类。文章还涵盖了线程间通信的方式,包括wait()、notify()和notifyAll()方法,以及如何避免死锁。此外,还介绍了高级并发工具如CountDownLatch和CyclicBarrier的使用方法。通过综合运用这些技术,可以有效提高多线程程序的性能和可靠性。