Java提供了两种方式来处理注解:第一种是利用运行时反射机制;另一种是使用Java提供的API来处理编译期的注解。

运行时通过反射:仅当定义的注解的@Retention为RUNTIME时,才能够通过运行时的反射机制来处理注解。

https://www.jb51.net/article/132038.htm

FruitName.java

  1. @Target(ElementType.FIELD)
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. public @interface FruitName {
  5. String value() default "";
  6. }

FruitColor.java

  1. @Target(ElementType.FIELD)
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. public @interface FruitColor {
  5. /**
  6. * 颜色枚举
  7. * @author peida
  8. *
  9. */
  10. public enum Color{
  11. BULE,RED,GREEN
  12. }
  13. ;
  14. /**
  15. * 颜色属性
  16. * @return
  17. */
  18. Color fruitColor() default Color.GREEN;
  19. }

FruitProvider.java

  1. @Target(ElementType.FIELD)
  2. @Retention(RetentionPolicy.RUNTIME)
  3. @Documented
  4. public @interface FruitProvider {
  5. /**
  6. * 供应商编号
  7. * @return
  8. */
  9. public int id() default -1;
  10. /**
  11. * 供应商名称
  12. * @return
  13. */
  14. public String name() default "";
  15. /**
  16. * 供应商地址
  17. * @return
  18. */
  19. public String address() default "";
  20. }

Apple.java

  1. public class Apple {
  2. @FruitName("Apple")
  3. private String appleName;
  4. @FruitColor(fruitColor=FruitColor.Color.RED)
  5. private String appleColor;
  6. @FruitProvider(id=1,name="陕西红富士集团",address="陕西省西安市延安路89号红富士大厦")
  7. private String appleProvider;
  8. public void setAppleColor(String appleColor) {
  9. this.appleColor = appleColor;
  10. }
  11. public String getAppleColor() {
  12. return appleColor;
  13. }
  14. public void setAppleName(String appleName) {
  15. this.appleName = appleName;
  16. }
  17. public String getAppleName() {
  18. return appleName;
  19. }
  20. public void setAppleProvider(String appleProvider) {
  21. this.appleProvider = appleProvider;
  22. }
  23. public String getAppleProvider() {
  24. return appleProvider;
  25. }
  26. public void displayName(){
  27. System.out.println("水果的名字是:苹果");
  28. }
  29. }

FruitInfoUtil.java

  1. public class FruitInfoUtil {
  2. public static void getFruitInfo(Class<?> clazz){
  3. String strFruitName=" 水果名称:";
  4. String strFruitColor=" 水果颜色:";
  5. String strFruitProvicer="供应商信息:";
  6. Field[] fields = clazz.getDeclaredFields();
  7. for (Field field :fields){
  8. if(field.isAnnotationPresent(FruitName.class)){
  9. FruitName fruitName = (FruitName) field.getAnnotation(FruitName.class);
  10. strFruitName=strFruitName+fruitName.value();
  11. System.out.println(strFruitName);
  12. } else if(field.isAnnotationPresent(FruitColor.class)){
  13. FruitColor fruitColor= (FruitColor) field.getAnnotation(FruitColor.class);
  14. strFruitColor=strFruitColor+fruitColor.fruitColor().toString();
  15. System.out.println(strFruitColor);
  16. } else if(field.isAnnotationPresent(FruitProvider.class)){
  17. FruitProvider fruitProvider= (FruitProvider) field.getAnnotation(FruitProvider.class);
  18. strFruitProvicer=" 供应商编号:"+fruitProvider.id()+" 供应商名称:"+fruitProvider.name()+" 供应商地址:"+fruitProvider.address();
  19. System.out.println(strFruitProvicer);
  20. }
  21. }
  22. }
  23. }

FruitRun.java

  1. public class FruitRun {
  2. /**
  3. * @param args
  4. */
  5. public static void main(String[] args) {
  6. FruitInfoUtil.getFruitInfo(Apple.class);
  7. }
  8. }

编译时:

https://blog.csdn.net/qfanmingyiq/article/details/75432854

java——注解处理器的更多相关文章

  1. Java注解处理器

    Java注解处理器 2015/03/03 | 分类: 基础技术 | 0 条评论 | 标签: 注解 分享到:1 译文出处: race604.com   原文出处:Hannes Dorfmann Java ...

  2. Java注解处理器(转)

    Java中的注解(Annotation)是一个很神奇的东西,特别现在有很多Android库都是使用注解的方式来实现的.一直想详细了解一下其中的原理.很有幸阅读到一篇详细解释编写注解处理器的文章.本文的 ...

  3. Java注解处理器使用详解

    在这篇文章中,我将阐述怎样写一个注解处理器(Annotation Processor).在这篇教程中,首先,我将向您解释什么是注解器,你可以利用这个强大的工具做什么以及不能做什么:然后,我将一步一步实 ...

  4. Java注解处理器--编译时处理的注解

    1. 一些基本概念 在开始之前,我们需要声明一件重要的事情是:我们不是在讨论在运行时通过反射机制运行处理的注解,而是在讨论在编译时处理的注解.注解处理器是 javac 自带的一个工具,用来在编译时期扫 ...

  5. 【转】java注解处理器——在编译期修改语法树

    https://blog.csdn.net/a_zhenzhen/article/details/86065063 前言从需求说起由于相关政策,最近公司安全部要求各系统在rpc接口调用的交互过程中把相 ...

  6. Java 注解处理器

    在Android开发中常用到一些第三方注解框架来简化代码.加快开发,如ButterKnife,androidannotations. 虽然常会用到,但没研究过其生成代码的原理,趁年后不忙,又温习了注解 ...

  7. Java注解处理器--annotation学习四

    Java中的注解(Annotation)是一个很神奇的东西,特别现在有很多Android库都是使用注解的方式来实现的.一直想详细了解一下其中的原理.很有幸阅读到一篇详细解释编写注解处理器的文章.本文的 ...

  8. Java注解与自己定义注解处理器

    动机 近期在看ButterKnife源代码的时候.竟然发现有一个类叫做AbstractProcessor,并且ButterKnife的View绑定不是依靠反射来实现的,而是使用了编译时的注解,自己主动 ...

  9. Java注解解析-搭建自己的注解处理器(CLASS注解使用篇)

    该文章是继Java注解解析-基础+运行时注解(RUNTIME)之后,使用注解处理器处理CLASS注解的文章.通过完整的Demo例子介绍整个注解处理器的搭建流程以及注意事项,你将知道如何去搭建自己的注解 ...

随机推荐

  1. 715B Complete The Graph

    传送门 题目大意 给出一个图,一些边带权,另一些边等待你赋权(最小赋为1).请你找到一种赋权方式,使得 s 到 t 的最短路为 L n ≤ 1e3 ,m ≤ 1e4 ,L ≤ 1e9 分析 二分所有边 ...

  2. Luogu 4552 [Poetize6] IncDec Sequence

    在BZOJ上好像被权限掉了. 考虑差分,定义差分数组$b$ $$b_i = \left\{\begin{matrix} a_i \ \ \ (i == 1)\\ a_i - a_{i - 1}\ \ ...

  3. Luogu 4310 绝世好题

    BZOJ 4300 先把这堆东西丢到博客里,以后再复习. 首先考虑暴力的$dp$,设$f_i$表示以$i$结尾的满足条件的序列的最长长度,有: $f_i = max(f_j) + 1$    $j & ...

  4. Luogu 3761 [TJOI2017]城市

    BZOJ 4890. 在树上断开一条边之后会形成两个联通块,如果要使这一条边接回去之后保持一棵树的形态,那么必须在两个联通块之间各找一个点连接. 那么,对于每一条可能断开的边,它产生的答案是以下两者的 ...

  5. Django框架 之 Cookie和Session初识

    Django框架 之 Cookie和Session初识 浏览目录 Cookie介绍 Django中的Cookie Session 一.Cookie介绍 1.Cookie产生的意义 众所周知,HTTP协 ...

  6. Django框架 之 admin管理工具(源码解析)

    浏览目录 单例模式 admin执行流程 admin源码解析 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在 ...

  7. [转]Apple耳机兼容非Mac设置

    转至:https://jingyan.baidu.com/article/6079ad0e99858228ff86db19.html 不兼容情况描述: 听音乐貌似只能听见伴奏的声音 解决方法: 第一种 ...

  8. 使用KubeAdm部署Kubernetes集群——如何访问google代码仓库及Yum源

    一.申请国外服务器,部署ShadowSock服务 1.下载并创建配置文件 wget https://github.com/shadowsocks/shadowsocks-go/releases/dow ...

  9. vue 路由里面的 hash 和 history

    对于 Vue 这类渐进式前端开发框架,为了构建 SPA(单页面应用),需要引入前端路由系统,这也就是 Vue-Router 存在的意义.前端路由的核心,就在于 —— 改变视图的同时不会向后端发出请求. ...

  10. [BZOJ1799][Ahoi2009]self 同类分布(数位dp)

    题目描述 给出两个数 a,ba,b ,求出 [a,b][a,b] 中各位数字之和能整除原数的数的个数. 输入输出格式 输入格式: 一行,两个整数 aa 和 bb 输出格式: 一个整数,表示答案 输入输 ...