注解处理器:
Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器。
注解处理器类库(java.lang.reflect.AnnotatedElement):
Java使用Annotation接口来代表程序元素前面的注解,该接口是所有Annotation类型的父接口。除此之外,Java在java.lang.reflect
包下新增了AnnotatedElement接口,该接口代表程序中可以接受注解的程序元素,该接口主要有如下几个实现类:
Class:类定义
Constructor:构造器定义
Field:累的成员变量定义
Method:类的方法定义
Package:类的包定义
java.lang.reflect 包所有提供的反射API扩充了读取运行时Annotation信息的能力。当一个Annotation类型被定义为运行时的Annotation后,
该注解才能是运行时可见,当class文件被装载时被保存在class文件中的Annotation才会被虚拟机读取。
AnnotatedElement 接口是所有程序元素(Class、Method和Constructor)的父接口,所以程序通过反射获取了某个类的AnnotatedElement对象之后,
程序就可以调用该对象的如下四个个方法来访问Annotation信息:
方法1:<T extends Annotation> T getAnnotation(Class<T> annotationClass): 返回改程序元素上存在的、指定类型的注解,如果该类型注解不存在,则返回null。
方法2:Annotation[] getAnnotations():返回该程序元素上存在的所有注解。
方法3:boolean is AnnotationPresent(Class<?extends Annotation> annotationClass):判断该程序元素上是否包含指定类型的注解,存在则返回true,否则返回false.
方法4:Annotation[] getDeclaredAnnotations():返回直接存在于此元素上的所有注释。与此接口中的其他方法不同,该方法将忽略继承的注释。(如果没有注释直接存在于此元素上,则返回长度为零的一个数组。)该方法的调用者可以随意修改返回的数组;这不会对其他调用者返回的数组产生任何影响。
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitName {
String value() default "";
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitColor {
public enum Color{ BULE,RED,GREEN};
Color fruitColor() default Color.GREEN;
}
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface FruitProvider {
public int id() default -1;
public String name() default "";
public String address() default "";
}
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);
}
}
}
}
public class FruitRun {
public static void main(String[] args) {
FruitInfoUtil.getFruitInfo(Apple.class);
}
}
分享到:
相关推荐
主要介绍了Java注解处理器简单实例,具有一定借鉴价值,需要的朋友可以参考下
博客中实现的源代码
这个代码实现了一个简单的日志记录系统。首先定义了一个Logger对象,用于记录日志信息。在main方法中,调用LOGGER的info方法输出程序开始和结束的日志信息。process方法用于处理日志文件,它使用了try-with-...
Java注解是附加在代码中的一些元信息,用于一些工具在编译、运行时进行解析和使用,起到说明、配置的功能。注解不会也不能影响代码的实际逻辑,仅仅起到辅助性的作用。包含在 java.lang.annotation 包中。注解...
【Android 组件化】路由组件 ( 注解处理器中使用 JavaPoet 生成代码 ) https://hanshuliang.blog.csdn.net/article/details/117157837 博客源码快照
编译时注解相信对每一个java开发者来说都不陌生,下面这篇文章主要给大家介绍了关于Java注解处理器学习之编译时处理的注解的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧
这个代码是一个自定义注解处理器,用于自动化生成API文档。在Java中,注解是一种元数据,可以附加到类、方法、字段等元素上,以提供额外的信息。而注解处理器则是一种工具,可以在编译时扫描和处理这些注解,并根据...
Gradle Apt 插件Java 注释处理器工具的 Gradle 插件。用法将插件添加到buildscript的dependencies并添加 Sonatype 的快照存储库以便能够下载它: buildscript { dependencies { repositories { maven { url " ...
柯里昂 Java 注释处理器库,用于通过简单的语法以解耦的方式分派和连接后台任务。用法库的使用非常简单。 首先,您需要了解可用的注释。注释@Job :在后台任务类之上使用,它可以包含多个@Rule类型的@Rule 。 @Rule ...
个人博客使用的代码(不建议下载);博客地址:https://blog.csdn.net/qq_31156277/article/details/
android中使用apt注解器实现类似butterknife的控件注解绑定控件id,本案例代码使用了编译时注解,利用注解处理器,以及javapoet生成代码技术,实现activity控件id绑定
学习注解,android实例使用自定义注解以及简单的注解处理器
生成源代码很容易,但是生成正确的源代码就不容易了。要使用优雅高效的方法来生成源代码将是一个繁重的任务。
什么是Java中的注解处理器?如何自定义和使用注解处理器? 什么是Java中的并发编程?列举一些常见的并发类和工具。 什么是Java中的线程池?如何创建和使用线程池? 什么是Java中的Callable和Future接口?如何使
这个项目提供了一个注解处理器来为java内部的方法提供默认参数 免责声明 private methods are not supported! 如何使用 由于项目当前未发布到主要 Maven 存储库,请添加: repositories { maven { url " ...
AnnotationProcessorBased JavaPoet , a demo of annotation processor;有 仿照 Butterknife,简单实现了BindView,OnClick注解过程;
智能ORM 基于注解处理器的 Android 简单快速 ORM。
4.Java中的注解处理器(Annotation Processing) 5.Java中的Lambda表达式和函数式接口 6.Java中的Optional类和null安全编程 7.Java中的并发集合(ConcurrentHashMap、CopyOnWriteArrayList等) 8.Java中的Future和...
注解在Android中的应用,构建运行时注解处理器和编译时注解处理器,通过Javapoet动态生成代码
30道经典java面试题 当面试Java开发职位时,以下是另外一些经典的Java面试题供参考: ...什么是Java中的注解处理器?如何自定义和使用注解处理器? 什么是Java中的并发编程?列举一些常见的并发类和工具。 什么是Ja