- 浏览: 4250081 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
masuweng:
...
kaptcha验证码组件使用简介 -
caobingyi:
你好,问下html是怎么调用loginCheck方法的?
kaptcha验证码组件使用简介 -
hayoouch:
XieFuQ 写道既然都考虑到乐观锁了,是否可以直接换表存储引 ...
mysql乐观锁总结和实践 -
murdonson:
辛苦了
mysql悲观锁总结和实践 -
iamnotstar:
写得不错,感谢分享
memcached-session-manager配置
定义简单的Annotation
Annotation的定义格式:
[public] @interface Annotation名称{ 数据类型 变量名称(); }
定义一个简单的Annotation
public @interface MyDefaultAnnotationNoneParam { }
之后就可以直接在程序中使用”@Annotation名称”的格式。
@MyDefaultAnnotationNoneParam public class AnnotationTest { }
此时就表示在AnnotationTest类上使用Annotation
还可以在Annotation中设置,使用变量接收参数
public @interface MyDefaultAnnotationSingleParam { public String value(); //接收设置的内容 }
在使用的时候就必需清楚地指明变量的内容
@MyDefaultAnnotationSingleParam("陈洲") public class AnnotationTest { }
或者也可以使用明确的标记,表示内容赋给哪个参数
@MyDefaultAnnotationSingleParam(value="陈洲") public class AnnotationTest { }
也可以同时设置多个参数
public @interface MyDefaultAnnotationMoreParam { public String key(); public String value(); }
此Annotation在使用的时候需要设置两个参数,一个是key,另外一个是value
@MyDefaultAnnotationMoreParam(key="name",value="陈洲") public class AnnotationTest { }
也可以使用数组当做Annotation的属性
public @interface MyDefaultAnnotationArrayParam { public String[] value(); }
接收的内容本身是一个数组类型,所以要传递数组参数
@MyDefaultAnnotationArrayParam(value={"China","America"}) public class AnnotationTest { }
以上所定义的全部Annotation有一个特点,所有的参数内容需要在使用注释时设置上去,那么也可以为一个参数设置默认的内容,在声明的时候使用default即可。
public @interface MyDefaultAnnotationValue { public String key() default "name"; //指定好了默认值 public String value() default "chenzhou"; //指定好了默认值 }
当再去使用此Annotation时就不用设置值了
@MyDefaultAnnotationValue public class AnnotationTest { }
没有设置内容,编译也不会出现任何错误。
在操作中,对于一个Annotation而言有时候会固定其取值范围,只能取固定的几个值,那么这个时候实际上就需要依靠枚举。
public enum Names { CHENZHOU,GONGYONG,YIXIN, }
以后的Annotation取值,只能从这三个值中取走。
public @interface MyDefaultAnnotationEnum { public MyName name() default MyName.CHENZHOU;//指定默认值 }
此时以上的Annotation已经设置好了一个枚举中的内容作为默认值,那么外部使用此Annotation的时候也需要从枚举固定取值
@MyDefaultAnnotationEnum(name=MyName.CHENZHOU) public class AnnotationTest { }
Retention和RetentionPolicy
在Annotation,可以使用Retention定义一个Annotation的保存范围,此Annotation的定义如下:
@Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.ANNOTATION_TYPE) public @interface Retention { RetentionPolicy value(); }
在以上的Retention定义中存在一个RetentionPolicy类型的变量,此变量用于指定Annotation的保存范围,RetentionPolicy包含三种范围
RetentionPolicy的三种范围
No. |
范围 |
描述 |
1 |
SOURCE |
此Annotation类型的信息只会保存在程序源文件中(*.java),编译之后不会保存在编译好的类文件(*.class)之中 |
2 |
CLASS |
此Annotation类型的信息会保存在程序源文件(*.java)和编译好的类文件(*.class)之中,在使用此类的时候,这些Annotation的信息将不会被加载到虚拟机JVM之中,如果一个Annotation声明时没有指定范围,则默认是此范围 |
3 |
RUNTIME |
此Annotation类型的信息会保存在程序源文件(*.java)和编译好的类文件(*.class)之中,在执行时也会加载到JVM中 |
在三种范围中,最需要关心的就是RUNTIME范围,因为在执行的时候起作用。
使用Retention指定一个Annotation的范围,范围为RUNTIME
@Retention(value = RetentionPolicy.RUNTIME) //表示此Annotation在运行时有效 public @interface MyDefaultRetentionAnnotation { public String name() default "chenzhou"; }
此Annotation可以在运行时起作用
内建Annotation的RetentionPolicy
- Override定义采用的是@Retention(value=SOURCE),只能在源文件中出现
- Deprecated定义采用的是@Retention(value=RUNTIME),可以在执行时出现。
- SuppressWarnings定义采用的是@Retention(value= SOURCE),只能在源文件中出现
Documented 标记
这个annotation非常简单,也非常容易理解,使用过javadoc命令的人都会很清楚,我们可以用javadoc命令将方法,类,变量等前面的注释转换成文档,在默认的情况下javadoc命令不会将我们的annotation生成再doc中去的,所以使用该标记就是告诉jdk让它也将annotation生成到doc中去,比如
@Documented public @interface Retention { RetentionPolicy value(); }
发表评论
-
kaptcha验证码组件使用简介
2013-12-10 11:53 46284Kaptcha是一个基于SimpleC ... -
由缓存导致的一个java序列化问题
2013-09-24 22:38 11337背景描述: 项目是普 ... -
使用maven插件对java工程进行打包
2012-10-26 17:30 51152现在基本上都是采用maven来进行开发管理,我有一个需求是需要 ... -
Spring拦截器中通过request获取到该请求对应Controller中的method对象
2012-10-21 16:51 160532背景:项目使用Spring 3.1.0.RELEASE,从da ... -
JVM学习笔记(九):基于栈的解释器执行过程
2012-07-26 00:37 5126本文根据《深入理解java ... -
JVM学习笔记(八):类加载器以及双亲委派模型介绍
2012-07-19 21:02 7782本章内容根据《深入理解Java虚拟机》第7章部分内容整理 ... -
JVM学习笔记(七):类加载的过程
2012-07-19 18:59 3637本文根据《深入理解java虚拟机》第7章部分内容整理 ... -
JVM学习笔记(六):类加载的时机
2012-07-18 14:58 8613本文根据《深入理解java ... -
JVM学习笔记(五):根据字节码指令介绍方法执行流程
2012-07-17 19:48 2821在上一篇博客中介绍了《Class文件结构》,其中就提 ... -
JVM学习笔记(四):Class文件结构
2012-07-17 18:29 5453本文根据《深入理解Java ... -
JVM学习笔记(三):JVM的垃圾回收
2012-07-12 21:06 4139注:本文根据《深入理解Java虚拟机》第3章部分内容整理而成 ... -
JVM学习笔记(二):JVM中对象访问的两种方式
2012-07-11 18:32 4354由于Reference类型在Java虚拟机规范里面只规定 ... -
JVM学习笔记(一):运行时数据区
2012-07-11 17:31 10586运行时数据区 java虚拟机定义了若干种程序运行时使 ... -
MyBatis批量插入数据
2012-07-10 08:50 433799在程序中封装了一个List集合对象,然后需要把该集合中的实体插 ... -
Maven依赖管理
2012-07-08 23:35 4849Maven提供dependencyManagemen ... -
Maven聚合与继承
2012-07-08 23:22 36685Maven聚合与继承 一、聚合 为了能够使用 ... -
java.lang.NoClassDefFoundError: org/aspectj/weaver/BCException
2012-06-18 10:27 30973在项目中使用了Spring管理和配置事务,在启动tom ... -
java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
2012-06-18 10:24 6249在项目中用到了bonecp连接池,启动tomcat时 ... -
常用的JDBC各种数据库连接
2012-06-04 18:15 18691、Oracle8/8i/9i数据库(thin模式) ... -
JDBC连接执行MySQL存储过程报权限错误
2012-05-28 14:40 16377在java中通过JDBC连接MySQL执行存储过程时报错: ...
相关推荐
自定义Annotation的例子,博客地址:http://blog.csdn.net/yirentianran/article/details/52816764
NULL 博文链接:https://jeremy102.iteye.com/blog/1743919
使用annotationProcessor插件在编译期创建Java文件 使用在idea中 可以尝试下
一个非常简单的自定义Annotation注解demo,方便新手学习
Spring Boot+Redis+拦截器+自定义Annotation如何实现接口自动幂等.docx
JPA、EJB、Spring零配置等等怎么使用相信各位读者都能掌握,这里主要是说如何自定义自己的注解,自己使用自定义的注解。
本篇文章给大家介绍了使用springboot和拦截器、redis来优雅的实现接口幂等,对于幂等在实际的开发过程中是十分重要的,因为一个接口可能会被无数的客户端调用,如何保证其不影响后台的业务处理,如何保证其只影响...
Annotation自定义地图上的Annotation,在Annotation上加入图片。
@Target:用于描述注解的使用范围,如果自定义注解不存在@Target,则表示该注解可以使用在任何程序元素之上。接收参数ElementType,其值如下: /**接口、类、枚举、注解**/ ElementType.TYPE /**字段、枚举的常量**/...
自定义注解annotation及用法
自定义Result,自定义Annotation的实例
初学者可以通过以上的说明制作简单的annotation程序,但是对于一些高级的annotation应用(例如使用自定义annotation生成javabean映射xml文件)还需要进一步的研究和探讨。涉及到深入annotation的内容,作者将在后文...
本文全面讲述了Java注解Annotation与Java自定义注解及相关内容,大家可以认真看看
Java基础复习笔记12Java自定义注解Annotation的使用
针对java 初学者或者annotation 初次使用者全面地说明了annotation 的使用方法、定义 方式、分类。...annotation 应用(例如使用自定义annotation 生成javabean 映射xml 文件)还需要进一步的 研究和探讨
本文针对java初学者或者annotation初次使用...初学者可以通过以上的说明制作简单的annotation程序,但是对于一些高级的annotation应用(例如使用自定义annotation生成javabean映射xml文件)还需要进一步的研究和探讨。
自定义地图标注MKAnnotationView。在地图Annotation上加图片,自定义Annotation的文字字体以及颜色、大小等。 小编注:感谢开发者@小子Y个 编译测试,适用环境:Xcode 4.5, iOS 4.0 以上。
spring中自定义注解(annotation)与AOP中获取注解.通过实例演示自定义注解。
6.6 编写自定义Annotation 6.7 本章小结 第7章 闲言碎语 7.1 动机 7.2 TestNG哲学 7.3 关注和提供异常 7.4 有状态的测试 7.5 测试驱动开发的缺点 7.6 测试私有方法 7.7 测试与封装 7.8 调试器的威力 7.9 记日志的...