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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值