java——注解处理器
Java提供了两种方式来处理注解:第一种是利用运行时反射机制;另一种是使用Java提供的API来处理编译期的注解。
运行时通过反射:仅当定义的注解的@Retention为RUNTIME时,才能够通过运行时的反射机制来处理注解。
https://www.jb51.net/article/132038.htm
FruitName.java
- @Target(ElementType.FIELD)
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- public @interface FruitName {
- String value() default "";
- }
FruitColor.java
- @Target(ElementType.FIELD)
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- public @interface FruitColor {
- /**
- * 颜色枚举
- * @author peida
- *
- */
- public enum Color{
- BULE,RED,GREEN
- }
- ;
- /**
- * 颜色属性
- * @return
- */
- Color fruitColor() default Color.GREEN;
- }
FruitProvider.java
- @Target(ElementType.FIELD)
- @Retention(RetentionPolicy.RUNTIME)
- @Documented
- public @interface FruitProvider {
- /**
- * 供应商编号
- * @return
- */
- public int id() default -1;
- /**
- * 供应商名称
- * @return
- */
- public String name() default "";
- /**
- * 供应商地址
- * @return
- */
- public String address() default "";
- }
Apple.java
- public class Apple {
- @FruitName("Apple")
- private String appleName;
- @FruitColor(fruitColor=FruitColor.Color.RED)
- private String appleColor;
- @FruitProvider(id=1,name="陕西红富士集团",address="陕西省西安市延安路89号红富士大厦")
- private String appleProvider;
- public void setAppleColor(String appleColor) {
- this.appleColor = appleColor;
- }
- public String getAppleColor() {
- return appleColor;
- }
- public void setAppleName(String appleName) {
- this.appleName = appleName;
- }
- public String getAppleName() {
- return appleName;
- }
- public void setAppleProvider(String appleProvider) {
- this.appleProvider = appleProvider;
- }
- public String getAppleProvider() {
- return appleProvider;
- }
- public void displayName(){
- System.out.println("水果的名字是:苹果");
- }
- }
FruitInfoUtil.java
- public class FruitInfoUtil {
- public static void getFruitInfo(Class<?> clazz){
- String strFruitName=" 水果名称:";
- String strFruitColor=" 水果颜色:";
- String strFruitProvicer="供应商信息:";
- Field[] fields = clazz.getDeclaredFields();
- for (Field field :fields){
- if(field.isAnnotationPresent(FruitName.class)){
- FruitName fruitName = (FruitName) field.getAnnotation(FruitName.class);
- strFruitName=strFruitName+fruitName.value();
- System.out.println(strFruitName);
- } else if(field.isAnnotationPresent(FruitColor.class)){
- FruitColor fruitColor= (FruitColor) field.getAnnotation(FruitColor.class);
- strFruitColor=strFruitColor+fruitColor.fruitColor().toString();
- System.out.println(strFruitColor);
- } else if(field.isAnnotationPresent(FruitProvider.class)){
- FruitProvider fruitProvider= (FruitProvider) field.getAnnotation(FruitProvider.class);
- strFruitProvicer=" 供应商编号:"+fruitProvider.id()+" 供应商名称:"+fruitProvider.name()+" 供应商地址:"+fruitProvider.address();
- System.out.println(strFruitProvicer);
- }
- }
- }
- }
FruitRun.java
- public class FruitRun {
- /**
- * @param args
- */
- public static void main(String[] args) {
- FruitInfoUtil.getFruitInfo(Apple.class);
- }
- }
编译时:
https://blog.csdn.net/qfanmingyiq/article/details/75432854
java——注解处理器的更多相关文章
- Java注解处理器
Java注解处理器 2015/03/03 | 分类: 基础技术 | 0 条评论 | 标签: 注解 分享到:1 译文出处: race604.com 原文出处:Hannes Dorfmann Java ...
- Java注解处理器(转)
Java中的注解(Annotation)是一个很神奇的东西,特别现在有很多Android库都是使用注解的方式来实现的.一直想详细了解一下其中的原理.很有幸阅读到一篇详细解释编写注解处理器的文章.本文的 ...
- Java注解处理器使用详解
在这篇文章中,我将阐述怎样写一个注解处理器(Annotation Processor).在这篇教程中,首先,我将向您解释什么是注解器,你可以利用这个强大的工具做什么以及不能做什么:然后,我将一步一步实 ...
- Java注解处理器--编译时处理的注解
1. 一些基本概念 在开始之前,我们需要声明一件重要的事情是:我们不是在讨论在运行时通过反射机制运行处理的注解,而是在讨论在编译时处理的注解.注解处理器是 javac 自带的一个工具,用来在编译时期扫 ...
- 【转】java注解处理器——在编译期修改语法树
https://blog.csdn.net/a_zhenzhen/article/details/86065063 前言从需求说起由于相关政策,最近公司安全部要求各系统在rpc接口调用的交互过程中把相 ...
- Java 注解处理器
在Android开发中常用到一些第三方注解框架来简化代码.加快开发,如ButterKnife,androidannotations. 虽然常会用到,但没研究过其生成代码的原理,趁年后不忙,又温习了注解 ...
- Java注解处理器--annotation学习四
Java中的注解(Annotation)是一个很神奇的东西,特别现在有很多Android库都是使用注解的方式来实现的.一直想详细了解一下其中的原理.很有幸阅读到一篇详细解释编写注解处理器的文章.本文的 ...
- Java注解与自己定义注解处理器
动机 近期在看ButterKnife源代码的时候.竟然发现有一个类叫做AbstractProcessor,并且ButterKnife的View绑定不是依靠反射来实现的,而是使用了编译时的注解,自己主动 ...
- Java注解解析-搭建自己的注解处理器(CLASS注解使用篇)
该文章是继Java注解解析-基础+运行时注解(RUNTIME)之后,使用注解处理器处理CLASS注解的文章.通过完整的Demo例子介绍整个注解处理器的搭建流程以及注意事项,你将知道如何去搭建自己的注解 ...
随机推荐
- 715B Complete The Graph
传送门 题目大意 给出一个图,一些边带权,另一些边等待你赋权(最小赋为1).请你找到一种赋权方式,使得 s 到 t 的最短路为 L n ≤ 1e3 ,m ≤ 1e4 ,L ≤ 1e9 分析 二分所有边 ...
- Luogu 4552 [Poetize6] IncDec Sequence
在BZOJ上好像被权限掉了. 考虑差分,定义差分数组$b$ $$b_i = \left\{\begin{matrix} a_i \ \ \ (i == 1)\\ a_i - a_{i - 1}\ \ ...
- Luogu 4310 绝世好题
BZOJ 4300 先把这堆东西丢到博客里,以后再复习. 首先考虑暴力的$dp$,设$f_i$表示以$i$结尾的满足条件的序列的最长长度,有: $f_i = max(f_j) + 1$ $j & ...
- Luogu 3761 [TJOI2017]城市
BZOJ 4890. 在树上断开一条边之后会形成两个联通块,如果要使这一条边接回去之后保持一棵树的形态,那么必须在两个联通块之间各找一个点连接. 那么,对于每一条可能断开的边,它产生的答案是以下两者的 ...
- Django框架 之 Cookie和Session初识
Django框架 之 Cookie和Session初识 浏览目录 Cookie介绍 Django中的Cookie Session 一.Cookie介绍 1.Cookie产生的意义 众所周知,HTTP协 ...
- Django框架 之 admin管理工具(源码解析)
浏览目录 单例模式 admin执行流程 admin源码解析 单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在 ...
- [转]Apple耳机兼容非Mac设置
转至:https://jingyan.baidu.com/article/6079ad0e99858228ff86db19.html 不兼容情况描述: 听音乐貌似只能听见伴奏的声音 解决方法: 第一种 ...
- 使用KubeAdm部署Kubernetes集群——如何访问google代码仓库及Yum源
一.申请国外服务器,部署ShadowSock服务 1.下载并创建配置文件 wget https://github.com/shadowsocks/shadowsocks-go/releases/dow ...
- vue 路由里面的 hash 和 history
对于 Vue 这类渐进式前端开发框架,为了构建 SPA(单页面应用),需要引入前端路由系统,这也就是 Vue-Router 存在的意义.前端路由的核心,就在于 —— 改变视图的同时不会向后端发出请求. ...
- [BZOJ1799][Ahoi2009]self 同类分布(数位dp)
题目描述 给出两个数 a,ba,b ,求出 [a,b][a,b] 中各位数字之和能整除原数的数的个数. 输入输出格式 输入格式: 一行,两个整数 aa 和 bb 输出格式: 一个整数,表示答案 输入输 ...