自定义 Java Annotation ,读取注解值

1. 首先是自定义注解:

Java代码  

  1. package cn.veji.hibernate.po;
  2. import java.lang.annotation.ElementType;
  3. import java.lang.annotation.Retention;
  4. import java.lang.annotation.RetentionPolicy;
  5. import java.lang.annotation.Target;
  6. @Target(ElementType.METHOD)
  7. @Retention(RetentionPolicy.RUNTIME)
  8. public @interface Privilege {
  9. String[] value();
  10. }

2.定义使用注解类:

Java代码  

  1. package cn.veji.hibernate.po;
  2. package cn.veji.hibernate.po;
  3. public class TestPrivilege {
  4. @Privilege( { "a" })
  5. public void a() {
  6. }
  7. @Privilege( { "b" })
  8. public void b() {
  9. }
  10. @Privilege( { "c" })
  11. public void c() {
  12. }
  13. }

3.读取注解值帮助类:

Java代码  

  1. package cn.veji.hibernate.po;
  2. package cn.veji.hibernate.test;
  3. import java.lang.annotation.Annotation;
  4. import java.lang.reflect.Method;
  5. import java.util.HashMap;
  6. import java.util.Map;
  7. import cn.veji.hibernate.po.Privilege;
  8. import cn.veji.hibernate.po.TestPrivilege;
  9. public class AnnotationUtil {
  10. public static AnnotationUtil anno = null;
  11. public static AnnotationUtil getInstance() {
  12. if (anno == null) {
  13. anno = new AnnotationUtil();
  14. }
  15. return anno;
  16. }
  17. /**
  18. * 读取注解值
  19. *
  20. * @param annotationClasss 处理Annotation类名称
  21. * @param annotationField 处理Annotation类属性名称
  22. * @param className 处理Annotation的使用类名称
  23. * @return
  24. * @throws Exception
  25. */
  26. @SuppressWarnings("all")
  27. public Map<String, String> loadVlaue(Class annotationClasss,
  28. String annotationField, String className) throws Exception {
  29. System.out.println("处理Annotation类名称  === "+annotationClasss.getName());
  30. System.out.println("处理Annotation类属性名称  === "+annotationField);
  31. System.out.println("处理Annotation的调用类名称  === "+className);
  32. Map<String, String> map = new HashMap<String, String>();
  33. Method[] methods = Class.forName(className).getDeclaredMethods();
  34. for (Method method : methods) {
  35. if (method.isAnnotationPresent(annotationClasss)) {
  36. Annotation p = method.getAnnotation(annotationClasss);
  37. Method m = p.getClass()
  38. .getDeclaredMethod(annotationField, null);
  39. String[] values = (String[]) m.invoke(p, null);
  40. for (String key : values) {
  41. System.out.println("注解值 === " + key);
  42. map.put(key, key);
  43. }
  44. }
  45. }
  46. System.out.println("map数量  === " + map.size());
  47. return map;
  48. }
  49. public static void main(String[] args) throws Exception {
  50. AnnotationUtil.getInstance().loadVlaue(Privilege.class, "value",
  51. TestPrivilege.class.getName());
  52. }
  53. }

4.执行结果:

Java代码  

    1. 处理Annotation类名称  === cn.veji.hibernate.po.Privilege
    2. 处理Annotation类属性名称  === value
    3. 处理Annotation的调用类名称  === cn.veji.hibernate.po.TestPrivilege
    4. 注解值 === c
    5. 注解值 === a
    6. 注解值 === b
    7. map数量  === 3
时间: 2024-08-05 06:45:50

自定义 Java Annotation ,读取注解值的相关文章

回顾java Annotation(注解)

最近在学习中发现相当多的框架是通过注解来实现的.为了加深记忆,把注解重新做一下回顾. 首先注解不是注释.--但因为java语言内置了三个注解:@Override.@Deprecated.@SuppressWarnnings.第一个是通知编译器做方法覆盖检查:第二个是提醒程序员使用了过时的方法:第三个是通知编译器忽略警告.这三个内置注解用起来给人的感觉就象注释一样.而实际上注解的用法远不止这么简单,通过使用自定义注解有助于加深我们的理解. 使用自定义注解目的是为了给程序加上某些标记(这种标记也可称

深入浅出Java Annotation(元注解和自定义注解)

一.基本概述 Annontation是Java5开始引入的新特征.中文名称一般叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类.方法.成员变量等)进行关联. 更通俗的意思是为程序的元素(类.方法.成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且是供指定的工具或框架使用的. Annontation像一种修饰符一样,应用于包.类型.构造方法.方法.成员变量.参数及本地变量的声明语句中. 二.原理 Annotation其实是

Java Annotation注解语法

JAVA从J2SE5开始提供名为annotation(注释,标注)的功能.Java的annotation,可以附加在package, class, method, field等上面,相当于给它们添加了额外的辅助信息.附加在package, class, method, field等上的Annotation,如果没有外部解析工具等对其加以解析和处理的情况,本身不会对Java的源代码或class等产生任何影响,也不会对它们的执行产生任何影响. 但借助外部工具,比如javac,EJB容器等,可以对附加

java自定义Annotation,得到注解类中Annotation设定的注解值

java注解机制在各大框架中应用普遍,注解中可以设置一些值,如何得到呢. 要得到注解类中Annotation设定的注解值 即:遍历自定义Annotation中的方法,反射执行方法,结果就是 对应的注解值. java代码例子: package com.doctor.spring.core; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotat

Java 自定义注解及利用反射读取注解

一.自定义注解 元注解: @interface注解: 定义注解接口 @Target注解: 用于约束被描述的注解的使用范围,当被描述的注解超出使用范围则编译失败.如:ElementType.METHOD,ElementType.TYPE: @Retention 注解:用于约束被定义注解的作用范围,作用范围有三个: 1,.RetentionPolicy.SOURCE:作用范围是源码,作用于Java文件中,当执行javac时去除该注解. 2.RetentionPolicy.CLASS:作用范围是二进制

【java】java中的注解(Annotation)是如何工作的?

Java中的注解是如何工作的? 自Java5.0版本引入注解之后,它就成为了Java平台中非常重要的一部分.开发过程中,我们也时常在应用代码中会看到诸如@Override,@Deprecated这样的注解.这篇文章中,我将向大家讲述到底什么是注解,为什么要引入注解,注解是如何工作的,如何编写自定义的注解(通过例子),什么情况下可以使用注解以及最新注解和ADF(应用开发框架).这会花点儿时间,所以为自己准备一杯咖啡,让我们来进入注解的世界吧. 什么是注解? 用一个词就可以描述注解,那就是元数据,即

java中的注解(Annotation)

转载:https://segmentfault.com/a/1190000007623013 简介 注解,java中提供了一种原程序中的元素关联任何信息.任何元素的途径的途径和方法. 注解是那些插入到源代码中使用其他工具可以对其进行处理的标签.注解不会改变程序的编译方式.java编译器会对包含注解与不包含注解的代码生成相同的虚拟机指令.在java中,注解是被当做修饰符(如public/static之类)来使用的. 注解与注释 注释是供人看的,注解是供程序调用的.一种是程序员写给另一个程序员的,一

Java学习之注解Annotation

一. 什么是注解(Annotation)? 1. 概念: Annotation是代码里的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行相应的处理.通过使用注释,程序开发人员可以可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充的信息. 2. 作用: 1)不是程序本身,可以对程序做出解释 2)可以被其他程序读取 3. 格式 注解是以"@注释名"在代码中存在的,还可以添加一些参数值,例如:@SuppressWarnings(value="unchecked"

Java基础:注解Annotation

从JDK5开始,Java增加了注解(Annotation),注解是代码里的特殊标记,这些标记可以在编译.类加载.运行时被读取,并执行相应的处理.通过使用注解,开发人员可以在不改变原有逻辑的情况下,在源文件中嵌入一些补充的信息.代码分析工具.开发工具和部署工具可以通过这些补充信息进行验证.处理或者进行部署. 注解提供了一种为程序元素(包.类.构造器.方法.成员变量.参数.局域变量)设置元数据的方法.跟public.static等修饰符一样,注解是这些程序元素的属性,是这些程序元素的一部分,不能脱离