定义Marker Annotation,也就是Annotation名称即提供信息对于程序分析工具来说,主要是检查是否有
MarkerAnnot的出现,并作出对应的动作
//用@interface来自定义一个annotation类型
//如下:用@interface来标识自定义一个annotation,而AnnotationTest为其名字
public @interface AnnotationTest {
}
annotation可以放在方法前面也可以放在类前面,以及属性前面,自定义的annotation与内建的
annotation使用方法是一样的。@+名字
定义带属性的annotation
public @interface AnnotationTest {
String value(); //定义一个String类型的属性
}
使用这个自定义的annotation时要带上参数了:@+名字("任意String类型值")
定义annotation的属性时如果属性名称为value,则使用该定义的annotation时参数直接接个String类
型的字符串就可以了。如果属性名称不是value如改成了value1,则使用时必须这样写:@+名字(定义属
性名="String类型的字符串")即:@+名字(value1="String类型值")
属性数组定义
public @interface AnnotationTest {
String[] value(); //定义一个String数组类型的属性
}
当使用该定义的annotation时参数大于一个时要用{}括起来
@AnnotationTest(value={"hello","word"})或者@AnnotationTest({"hello","word"})因为属性名为
value
可以给自定义的annotation属性赋个默认的值用default.
public @interface AnnotationTest {
String value() default "hello"; //定义一个String类型的属性并赋个默认值
}
当设置属性有默认值后,使用该annotation时可以直接使用@AnnotationTest,其参数值就是默认的值,
如果没有设置属性默认值的话不能不带参使用,会报错的.当使用时加了参数值将覆盖原来默认的值。
定义枚举类型的annotation
public @interface AnnotationTest{
EnumTest value1();
}
enum EnumTest{
Hello,World,Welcome;
}
使用annotation为:@AnnotationTest(value1=EnumTest.Hello)
.....
也可以为其定义属性默认值如下:
public @interface AnnotationTest{
EnumTest value1() default EnumTest.Hello;
}
enum EnumTest{
Hello,World,Welcome;
}
使用时直接@AnnotationTest就可以了,使用默认值。
使用@interface自行定义Annotation型态时,实际上是自动继承了java.lang.annotation.Annotation
接口,由编译程序自动为你完成了其它产生的细节。在定义Annotation型态时,不能继承其它的
Annotation型态或是接口,即自定义注解类型annotation后面不能跟任务东西了,不能继承父类,不能
去实现接口.
定义Annotation类型时也可以使用包来管理类别,方式类同于类的导入功能。即在使用的自定义
annotation时通过包的方式导入自定义annotation,如:@包名.AnnotationTest.
也可以按原来的方式写,可以通过import的方式导入annotation类.
告知编译程序如何处理@Retention
java.lang.annotation.Retention型态可以在你定义Annotaion型态时,指示编译程序如何对待你的自
定义的Annotation型态,预设上编译程序会将Annotation信息留在.class档案中,但不被虚拟机读取,
而仅用于编译程序或工具程序运行时提供信息。即注解是保存在.class文件中.通过反射的方式去读取
注解信息。
保持力策略:
在使用Retention型态时,需要提供java.lang.annotation.RetentionPolicy的枚举型态
package java.lang.annotation;
public enum RetentionPolicy
{
SOURCE, //编译程序处理完Annotation信息后就完成任务
CLASS, //编译程序将Annotation储存于class档中,缺省
RUNTIME //编译程序将Annotation储存于class檔中,可由VM读入
}
RetentionPolicy为SOURCE的例子是@SuppressWarnings,查询API可以得到:
@Retention(value=SOURCE)
public @interface SuppressWarnings......
仅在编译时期告知编译程序来抑制警告,所以不必将这个信息储存于.class档案
RetentionPolicy为RUNTIME的时机,可以像是您使用Java设计一个程序代码分析工具,您必须让VM能读
出Annotation信息,以便在分析程序时使用
搭配反射(Reflection)机制,就可以达到这个目的
定义Annotation时必须设定RetentionPolicy为RUNTIME,也就是可以在VM中读取Annotation信息,也就
是通过反射机制来读取annotation的信息
分享到:
相关推荐
在Spring MVC框架中,`mvc:annotation-driven`和`mvc:message-converters`是两个非常重要的元素,它们在处理基于注解的控制器和数据转换方面起着关键作用。本篇文章将深入探讨这两个组件的工作原理以及如何在实际...
自定义注解需要相应的处理器来处理,这通常通过Java的注解处理工具(Annotation Processing Tool, apt)或Java Compiler API实现。处理器会在编译时自动触发,解析注解并执行相应逻辑。 6. **注解的应用场景** - ...
然而,在使用`<mvc:annotation-driven />`元素时,有时会出现与自定义拦截器的冲突问题。这个问题通常出现在当我们试图同时配置基于注解的控制器处理和自定义拦截器时,Spring可能无法正确地处理这些组件的执行顺序...
在Java编程语言中,注解(Annotation)是一种元数据,它提供了在代码中附加信息的能力,这些信息可以被编译器或运行时环境用来验证、处理或增强代码的行为。本篇我们将深入探讨“限定使用、文档、继承”这三个关键...
Java注释处理器客户端是Java开发中的一个重要工具,它在编译期间...通过深入学习和实践`java-annotation-processor-client`,开发者能够更好地掌握这一技术,并将其应用于各种复杂场景,从而提升软件开发的效率和质量。
【描述】"JAVA源码文本 textpattern-groupdocs-annotation-java-source"进一步强调了这是一个Java编程语言的源代码集合,它涉及到`textpattern`功能,这可能是自定义的文本处理模式或规则,而`groupdocs.annotation....
开发者通常需要源代码来更好地理解和学习API的内部工作原理,进行调试或自定义修改。由于此版本的源码包不支持分共享,意味着它可能是一个独立的、完整的包,无法与其他版本的javax.annotation库合并。 javax....
在描述中提到的"mybatis-generator-core-chinese-annotation-1.3.5-master.zip"是一个包含MBG中文注解版1.3.5版本的压缩包,旨在帮助开发者更方便地理解和使用这个工具。 MBG的核心功能在于根据数据库表自动生成...
《深入解析annotation-file-utilities.jar.zip及其核心概念》 在Java开发中,注解(Annotation)扮演着不可或缺的角色,它提供了元数据的功能,使得开发者能够为代码添加额外的信息,而这些信息可以被编译器、IDE或...
WebRoute自定义注释使用自定义批注将浏览器请求路由到特定处理程序方法的小型Web服务器描述您的任务是创建一个微型网络服务器,该服务器使用批注将浏览器请求路由到特定的处理程序方法,这基本上是路由机制的一个...
- `ANNOTATION_TYPE`:适用于注解类型。 - `PACKAGE`:适用于包。 8. `@Documented`: 如果一个注解被`@Documented`修饰,那么在生成Javadoc时,该注解会被包含在文档中。 9. `@Inherited`: 如果注解被`@...
通过学习和实践这个“hello-world-annotation-processing”项目,你可以深入了解Java注释处理的工作原理,以及如何利用它来提升代码质量和开发效率。在实际开发中,注释处理常用于自动代码生成(如ORM框架的实体类...
使用`rush-annotation-processor`时,你需要在你的Java项目中添加相应的依赖,并在源代码中使用自定义的注解。当编译项目时,注释处理器会自动触发,根据注解执行相应的操作。 总的来说,`rush-annotation-...
使用 drawRect 方法自定义注释视图 —— 这是使用自定义drawRect方法的自定义MKAnnotationView子类的演示。 这在。 这仅用于说明目的。 在 Xcode 6.3 中为 iOS 8.3 开发。 UIAlertController警报的使用,这也应该...
在`java-annotation-processor-master`这个项目中,你可以找到一个关于如何创建和使用Java注释处理器的示例。该项目可能包含以下几个部分: - `src/main/java`: 存放注解处理器和相关注解的源代码。 - `src/main/...
`annotation-1.4.14.jar`这个库可能包含了自定义注解的实现以及对应的处理器,使得开发者能够扩展Java注解的功能,创建自己的元数据规范。例如,这个库可能包含了一些特定的注解,用于数据库映射、AOP切面编程或者...
在IT行业中,"annotation"(注解)是一个关键的概念,特别是在Java编程语言中。注解是一种元数据,它提供了在不改变程序代码行为的情况下向编译器或JVM(Java虚拟机)提供信息的方式。注解可以用于简化开发、提供...
4. **数据转换和格式化**:`<mvc:annotation-driven/>`还会自动注册一些数据转换器和服务,如`StringToXXXConverter`,用于将请求参数转换为合适的对象类型。同时,它也支持自定义转换器和格式化器,以便处理特定的...
Android-Annotation-Study Android注解生成代码 Android注解生成代码老早前就开始用了,在以前Eclipse ADT时代就已经开始使用AvailableAnnotations注解框架,极大简化了Android开发。只是一开始并不了解其原理,感觉...
此外,ArcGIS还支持自定义快捷键,用户可以根据个人习惯进行设置,以更好地适应自己的工作流程。由于ArcGIS与CAD有良好的兼容性,很多操作方式与CAD类似,这也使得熟悉CAD的用户更容易上手ArcGIS。通过深入学习和...