定义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的信息
分享到:
相关推荐
springboot-aop-annotation-redis-demo:源码主要用于学习SpringBoot + AOP + Redis控制Redis自动缓存和删除,通过AOP切面+基于自定义注释解,实现缓存查询,清除操作,缓存层使用RedisTemplate,重新自带的...
WebRoute自定义注释使用自定义批注将浏览器请求路由到特定处理程序方法的小型Web服务器描述您的任务是创建一个微型网络服务器,该服务器使用批注将浏览器请求路由到特定的处理程序方法,这基本上是路由机制的一个...
使用 drawRect 方法自定义注释视图 —— 这是使用自定义drawRect方法的自定义MKAnnotationView子类的演示。 这在。 这仅用于说明目的。 在 Xcode 6.3 中为 iOS 8.3 开发。 UIAlertController警报的使用,这也应该...
Android-Annotation-Study Android注解生成代码 Android注解生成代码老早前就开始用了,在以前Eclipse ADT时代就已经开始使用AvailableAnnotations注解框架,极大简化了Android开发。只是一开始并不了解其原理,感觉...
xxx”),可以自定义转换词组,也可以使用翻译 2,一键生成对象的设置方法 3,一键复制完整的restful地址,支持SpringMvc和Feign安装教程方法一:在IDEA marketplace中搜索swagger-annotation-tool安装。IDEA->设置-...
spring-boot实现原理 ...spring-boot-alias-annotation-sample注解属性别名模块 spring-boot-actuator-sample监控组件模块 spring-boot-enable-sample自动装配模块 formatter-spring-boot-starter-sample自定义启动模
Java记录工具通过实现Java注释包来创建自定义绑定的自定义日志记录工具。
中使用自定义映射器,我们可以自定义默认映射方法 git clone https://github.com/sunilrai7607/mapstruct-friends-service.git MAC machine (IntelliJ click on terminal) % chmod 777 ./gradlew % ./gradlew clean ...
java注解原始代码自定义Java注释 教程如何在以下位置创建自定义Java注释的源代码
SpringBoot 自定义注解,属性支持SPEL表达式。介绍了SPEL表达式的解析
@Target:用于描述注解的使用范围,如果自定义注解不存在@Target,则表示该注解可以使用在任何程序元素之上。接收参数ElementType,其值如下: /**接口、类、枚举、注解**/ ElementType.TYPE /**字段、枚举的常量**/...
Annotation自定义地图上的Annotation,在Annotation上加入图片。
自定义Annotation的例子,博客地址:http://blog.csdn.net/yirentianran/article/details/52816764
矢量模拟时钟 适用于Android的简单,可自定义的VectorAnalogClock视图。 可调整大小。 运动平稳。 在各种屏幕尺寸和密度上进行了...import android.support.annotation.RequiresApi ; import android.util.Attribute
springboot-demo springboot demo:Springboot项目 springboot-mybatis-multidatasource:Mybatis多数据源 ...springboot-custom-annotation:自定义开关注解 springboot-sharding-jdbc:ShardingJDBC
React注释完整文档: :设置使用NPM 您可以通过运行以下命令将react-annotation添加为节点模块npm i react-annotation -S 如果您不熟悉React,建议您使用启动项目本地设置和构建该项目使用 ,请确保在安装和构建之前...
基于Java批注或简单数据库表的自定义SQL脚本创建/修改命令-生成SQL脚本 基于自定义注释的自定义文档,生成XML,DOC,HTML ... 简体语言 ${ cls . name } // full class name ${ cls . table } // entity table name...
使用NPM 您可以通过运行以下命令将d3-annotation添加为节点模块npm i d3-svg-annotation -S回馈我希望收到您关于有用的任何其他功能的消息,请在twitter 上。现有技术 D3插件 ,用于放置圆圈和文本注释以及克里斯·...
推测注释目录自定义主题路线图贡献执照接触致谢 关于该项目Speculative Annotation是美国国会图书馆创新者在 Courtney McClellan 的一个动态网站和公共艺术项目。 该工具提供了来自国会图书馆的独特迷你免费使用项目...
还有边缘或整页侧滑、夜间模式切换等小功能,还写了几个自定义小控件,虽然无啥卵用,但是学到了很多东西,很有收获。 二、运行截图 (图一) (图二) (图三) (图四) (图五) (图六) (图七) (图八) (图九) 三、用到的...