java注解

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

2020/1/30iSoftStoneTechnologiesLtd.Java注解©2005iSoftStoneTechnologiesLtd.Allrightsreserved.2第2页概述掌握JavaAnnotation特性与使用方式Annotation的由来Annotation的定义方式Annotation的使用方式JDK5内建Annotation详解Annotation高级特性©2005iSoftStoneTechnologiesLtd.Allrightsreserved.3为什么使用Annotation在JAVA应用中,我们常遇到一些需要使用模版代码的情况。例如,为了编写一个webservice,我们必须提供一对接口和实现作为模版代码。如果使用annotation对远程访问的方法代码进行修饰的话,这个模版就能够使用工具自动生成。另外,一些API需要使用与程序代码同时维护的附属文件。例如EJB需要一个部署描述符。此时在程序中使用annotation来维护这些附属文件的信息将十分便利而且减少了错误。©2005iSoftStoneTechnologiesLtd.Allrightsreserved.4Annotation工作方式从Java5.0版发布以来,5.0平台提供了一个正式的annotation功能:允许开发者定义、使用自己的annotation类型。此功能由一个定义annotation类型的语法和一个描述annotation声明的语法,读取annotation的API,一个使用annotation修饰的class文件,一个annotation处理工具(apt)组成。©2005iSoftStoneTechnologiesLtd.Allrightsreserved.5Annotation工作方式annotation并不直接影响代码语义,但是它能够工作的方式被看作类似程序的工具或者类库,它会反过来对正在运行的程序语义有所影响。annotation可以从源文件、class文件或者以在运行时反射的多种方式被读取。当然annotation在某种程度上使javadoctag更加完整。一般情况下,如果这个标记对java文档产生影响或者用于生成java文档的话,它应该作为一个javadoctag;否则将作为一个annotation。第5页©2005iSoftStoneTechnologiesLtd.Allrightsreserved.6使用JDK5内建Annotation参见程序实例OverrideDeprecatedSuppressWarnings第6页©2005iSoftStoneTechnologiesLtd.Allrightsreserved.7限定Override父类方法@Overridejava.lang.Override是个Markerannotation用于标示的Annotation,Annotation名称本身即表示了要给工具程序的信息第7页©2005iSoftStoneTechnologiesLtd.Allrightsreserved.8标示方法為Deprecated@Deprectated对编译程序说明某个方法已经不建议使用,即该方法是过时的。java.lang.Deprecated也是個MarkerannotationDeprecated这个名称在告知编译程序,被@Deprecated标示的方法是一个不建议被使用的方法第8页©2005iSoftStoneTechnologiesLtd.Allrightsreserved.9抑制编译程序警告@SuppressWarnings对编译程序说明某个方法中若有警告讯息,则加以抑制第9页©2005iSoftStoneTechnologiesLtd.Allrightsreserved.10自定义Annotation类型定义MarkerAnnotation,也就是Annotation名称本身即提供信息对于程序分析工具来说,主要是检查是否有MarkerAnnotation的出现,并作出对应的动作参见程序范例第10页©2005iSoftStoneTechnologiesLtd.Allrightsreserved.11Single-valueannotationvalue成员设定默认值,用default关键词数组方式的使用枚举在Annotation中的应用第11页©2005iSoftStoneTechnologiesLtd.Allrightsreserved.12自定义Annotation类型使用@interface自行定义Annotation型态时,实际上是自动继承了java.lang.annotation.Annotation接口由编译程序自动为您完成其它产生的细节在定义Annotation型态时,不能继承其它的Annotation型态或是接口第12页©2005iSoftStoneTechnologiesLtd.Allrightsreserved.13自定义Annotation类型定义Annotation型态时也可以使用包来管理类别方式类同于类的导入功能第13页©2005iSoftStoneTechnologiesLtd.Allrightsreserved.14告知编译程序如何处理@Retentionjava.lang.annotation.Retention型态可以在您定义Annotation型态时,指示编译程序该如何对待您的自定义的Annotation型态预设上编译程序会将Annotation信息留在.class档案中,但不被虚拟机读取,而仅用于编译程序或工具程序运行时提供信息©2005iSoftStoneTechnologiesLtd.Allrightsreserved.15告知编译程序如何处理@Retention在使用Retention型态时,需要提供java.lang.annotation.RetentionPolicy的枚举型态packagejava.lang.annotation;publicenumRetentionPolicy{SOURCE,//编译程序处理完Annotation信息后就完成任务CLASS,//编译程序将Annotation储存于class档中,缺省RUNTIME//编译程序将Annotation储存于class檔中,可由VM读入}第15页©2005iSoftStoneTechnologiesLtd.Allrightsreserved.16告知编译程序如何处理@RetentionRetentionPolicy为SOURCE的例子是@SuppressWarnings仅在编译时期告知编译程序来抑制警告,所以不必将这个信息储存于.class档案RetentionPolicy为RUNTIME的时机,可以像是您使用Java设计一个程序代码分析工具,您必须让VM能读出Annotation信息,以便在分析程序时使用搭配反射(Reflection)机制,就可以达到这个目的第16页©2005iSoftStoneTechnologiesLtd.Allrightsreserved.17告知编译程序如何处理@Retentionjava.lang.reflect.AnnotatedElement接口publicAnnotationgetAnnotation(ClassannotationType);publicAnnotation[]getAnnotations();publicAnnotation[]getDeclaredAnnotations();publicbooleanisAnnotationPresent(ClassannotationType);Class、Constructor、Field、Method、Package等类别,都实现了AnnotatedElement接口第17页©2005iSoftStoneTechnologiesLtd.Allrightsreserved.18告知编译程序如何处理@Retention定义Annotation时必须设定RetentionPolicy为RUNTIME,也就是可以在VM中读取Annotation信息参见程序第18页©2005iSoftStoneTechnologiesLtd.Allrightsreserved.19限定annotation使用对象@Target使用java.lang.annotation.Target可以定义其使用之时机在定义时要指定java.lang.annotation.ElementType的枚举值之一第19页©2005iSoftStoneTechnologiesLtd.Allrightsreserved.20限定annotation使用对象@Targetpackagejava.lang.annotation;publicenumElementType{TYPE,//适用class,interface,enumFIELD,//适用fieldMETHOD,//适用methodPARAMETER,//适用method上之parameterCONSTRUCTOR,//适用constructorLOCAL_VARIABLE,//适用局部变量ANNOTATION_TYPE,//适用annotation型态PACKAGE//适用package}参见范例第20页©2005iSoftStoneTechnologiesLtd.Allrightsreserved.21要求为API文件@Documented想要在使用者制作JavaDoc文件的同时,也一并将Annotation的讯息加入至API文件中使用java.lang.annotation.Documented第21页©2005iSoftStoneTechnologiesLtd.Allrightsreserved.22子类是否继承父类@Inherited预设上父类别中的Annotation并不会被继承至子类别中可以在定义Annotation型态时加上java.lang.annotation.Inherited型态的Annotation第22页©2005iSoftStoneTechnologiesLtd.Allrightsreserved.23子类是否继承父类@Inherited事实上,Inherated在JDK5中还没有发生作用第23页2020/1/30iSoftStoneTechnologiesLtd.谢谢!

1 / 24
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功