@Retention– 定义该注解的生命周期。
RetentionPolicy.SOURCE – 在编译阶段丢弃。这些注解在编译停止之后就不再有任何意义,所以它们不会写入字节码。@Override, @SuppressWarnings都属于这类注解。
RetentionPolicy.CLASS – 在类加载的时刻丢弃。在字节码文件的处理中有效。注解默认应用这种方法。
RetentionPolicy.RUNTIME– 始终不会丢弃,运行期也保存该注解,是以可以应用反射机制攫取该注解的信息。我们自定义的注解平日应用这种方法。
@Target – 表示该注解用于什么处所。如不雅不明白指出,该注解可以放在任何处所。以下是一些可用的参数。须要解释的是:属性的注解是兼容的,如不雅你想给7个属性都添加注解,仅仅清除一个属性,那么你须要在定义target包含所有的属性。
什么是注解?
ElementType.TYPE:用于描述类、接口或enum声明
应用Annotation之前(甚至在应用之后),XML被广泛的应用于描述元数据。不知何时开端一些应用开辟人员和架构师发明XML的保护越来越糟糕了。他们欲望应用一些和代码紧耦合的器械,而不是像XML那样和代码是松耦合的(在某些情况下甚至是完全分别的)代码描述。如不雅你在Google中搜刮“XML vs. annotations”,会看到很多关于这个问题的┞幅辩。最有趣的是XML设备其实就是为了分别代码和设备而惹人的。上述两种不雅点可能会让你困惑惑,两者不雅点似乎构成了一种轮回,但各有利弊。下面我们经由过程一个例子来懂得这两者的差别。
ElementType.FIELD:用于描述实例变量
ElementType.METHOD
ElementType.PARAMETER
当我们应用Java的标注Annotations(例如@Override)时,JVM就是一个用户,它在字节码层面工作。到这里,应用开辟人员还不克不及控制也不克不及应用自定义的注解。是以,我们讲解一下若何编写自定义的Annotations。
ElementType.LOCAL_VARIABLE
ElementType.ANNOTATION_TYPE 另一个注释
ElementType.PACKAGE 用于记录java文件的package信息
@Inherited – 定义该注释和子类的关系
那么,注解的内部到底是若何定义的呢?Annotations只支撑根本类型、String及列举类型。注释中所有的属性被定义成办法,并许可供给默认值。
- @Target(ElementType.METHOD)
- @Retention(RetentionPolicy.RUNTIME)
- @interface Todo {
- public enum Priority {LOW, MEDIUM, HIGH}
- public enum Status {STARTED, NOT_STARTED}
- String author() default "Yash";
- Priority priority() default Priority.LOW;
- Status status() default Status.NOT_STARTED;
- }
注解的功能很强大年夜,Spring和Hebernate这些框架在日记和有效性中大年夜量应用了注解功能。注解可以应用在应用标记接口的处所。不合的是标记接口用来定义完全的类,但你可认为单个的办法定义注释,例如是否将一个办法裸露为办事。
下面的例子演示了若何应用膳绫擎的注解。
- @Todo(priority = Todo.Priority.MEDIUM, author = "Yashwant", status = Todo.Status.STARTED)
- public void incompleteMethod1() {
- //Some business logic is written
- //But it’s not complete yet
- }
如不雅注解中只有一个属性,可以直接定名为“value”,应用时无需再标明属性名。
- @interface Author{
- String value();
- }
- @Author("Yashwant")
- public void someMethod() {
推荐阅读
来了,支持 iOS 开发的 Kotlin/Native v0.4 发布
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 下面是 v0.4 中新平台库的使悠揭捉?示。Kotlin / Native v0.4 已宣布,这也恰是在 KotlinConf 2017 上宣>>>详细阅读
本文标题:Java中的注解是如何工作的
地址:http://www.17bianji.com/lsqh/38975.html
1/2 1