`
tkiicpp
  • 浏览: 83216 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Java Annotations 批注

阅读更多

作者: DJ Walker-Morgan

 

批注能够消除样板代码,让源代码的可读性更高,并能提供级别更高的错误检查。从 EJB3 JUnit4 ,哪里都在使用它。本文就将告诉你如何使用它。

Java 5向Java引入了批注(Annotations),它的使用迅速成为现代Java开发中不可缺少的一部分。

 

为什么要发明批注?

问题:JAVA缺少元数据;缺乏将Java以外的代码嵌入到Java源代码文件里的能力等

解决方法一:JavaDoc (在代码里专门标记注释,能够提取出额外的信息,即文档,并转换成为JavaDoc文档)

首先有Doclet,目的是让人们扩展文档的输 出。

然后是Xdoclet,像使用标记一样使用JavaDoc来生成代码。

J2EE原来依靠很多样板代码(boilerplate code)把对象捆绑到J2EE框架里。

这些方案的问题:首先,注释里的标记不会进入最终的源代码,所以除非你生成代码来反映这些标记, 而且基于注释的标记在编译期间无法被IDE检查

于是:Java新增了批注。

 

什么是批注?

批注是用于Java语言的本机元数据标记

BaseExample:

public class BaseExample {

public BaseExample() {}

public void myMethod() {

System.out.println("This is the BaseExample");

}

}

现在,扩展BaseExample,并替代myMethod:

public class Example1 extends BaseExample {

 public Example1() {} 

@Overridepublic void myMethod() {

System.out.println("This is the Example1");

}

}

 

@Override的意思是“方法必须替代其超类中的一个方法;如果做不到这一点,那么就会有东西出错,使得编译器产生错误”。

没有@Override,代码照样会正常工作,但是假设有人修改 BaseExample,让myMethod带有参数。如果你没有使用@Override批注,代码仍然会被编译,隐藏了子类没有替代超类方法的问题。如果有@Override的话,你会在编译期间看到发生错误。

 

可以创建自己的批注标记

我们有一些简单的Java Beans程序,它们都带有不同的字符串字段。我们希望能够有一些通用窗体显示代码,它们能够用其他显示提示(比如宽度)来正确地标示这些字段。现在我们 可以编写一个超类,它能够提取出这个数据,比如说从一个在每个类里都带有一些静态支持方法的静态数组里,但是这也意味着要强制给代码分层。利用批注做到这 一点就要简单得多了。现在让我们从定义FormLabel.java里的FormLabel的批注开始:

import java.lang.annotation.*; 

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.METHOD)

public@interface FormLabel {String label();

int width() default 40;

}

 

你 应该注意到的第一件事是Java使用了它自己内置的一些批注来定批注:@Retention和@Target。@Retention用来定义通过设置 RetentionPolicy的值批注能够在构建-运行过程中存留多久。这里我们使用了RUNTIME,这意味着我们定义的批注将会在运行期间被保留在 代码里。RetentionPolicy.SOURCE将被用于一个我们希望被编译器使用然后抛弃的批注。RetentionPolicy.CLASS让 它们保留在生成的类文件里,但是能够在运行期间被Java虚拟机(JVM)访问到。

在默认情况下,你可以在代码里的任何地方都应用 批注。@Target批注让你能够将它限制在代码的特定部分里。在本文里,我们把目标瞄准了ElementType.METHOD,这意味着它只能够与方 法关联在一起。其他ElementTypes有CONSTRUCTOR、FIELD、LOCAL_VARIABLE、PACKAGE、PARAMETER 和TYPE,每个都能够把批注限制到该种类型的Java语言元素,所以例如,设置TYPE将只允许批注为定义过的这种类型,比如:

@OurAnnotation

public class OurAnnotatedClass {…

值得注意的是,@Target批注能够接受单个ElementType或者一个ElementType数组,如果你想要将批注限制为一系列语言元素的话。

分享到:
评论

相关推荐

    java JPA 批注参考

    JPA通过使用批注(Annotations)来配置实体的行为,使得无需编写XML配置文件即可实现ORM功能。批注是元数据的一种形式,它们直接嵌入到Java源代码中,并在运行时由JPA提供程序解析以执行相应的操作。 1. **实体批注...

    graphql-java-annotations:Java的GraphQL注释

    GraphQL-Java批注 是一个很棒的库,但是它的语法有点冗长。 该库为GraphQL模式定义提供了基于注释的语法。 如果您想使用使用graphql-java-annotations创建graphql spring引导服务器的工具,则可以查看库。 目录 ...

    JPA 批注参考Java JPA

    JPA的核心特性是使用批注(annotations)来配置实体的行为。批注是一种元数据,直接在Java源代码中添加,编译后在运行时被JPA持久化提供商解释以管理对象关系映射。 以下是JPA批注的一些主要类别和用法: 1. **...

    proguard-annotations:Proguard批注AAR

    批注是怎么做的? 也可以看看 从官方导入 参考 测试 $ /gradelw clean assembleRelease $ cd proguard-annotations-app/build/outputs/apk $ unzip proguard-annotations-app-release-unsigned.apk $ dex2jar ...

    graphql-java-annotations-subscription-server

    GraphQL Java批注订阅服务器 这是使用Spring Boot和GraphQL-Java-Annotations库的graphql服务器的一个漂亮实现(不是这样)。 根据graphql-ws协议,它还使用graphql-java v7.0和Websocket实现了GraphQL订阅。 欢迎您...

    simplecsv:使用Java批注的简单Java CSV读写库

    简单的Java CSV读取器/写入器该软件包提供了一些Java类,以帮助使用Java批注读取和写入CSV文件。 有关更多信息,请访问。 在源代码中,有一个。 可以在主页上找到在线文档,包括 。 源可以从。 Maven软件包通过发布 ...

    Java标准版的EJB Persistence(一)

    在Java 5中,Annotations(批注)的引入极大地简化了这一过程。本教程主要关注如何使用EJB 3.0的持久化特性,现在通常称为JPA,来持久化对象,特别是通过Hibernate的EntityManager和Annotations将简单的Person和...

    MMT_Annotations:使用注释监视Java应用程序

    #MMTA注释# 该项目定义了一组Java批注,这些批注允许监视Java类,方法或类的字段的状态。 例如,在方法声明之前添加@Monitor批注以报告方法状态(调用时,返回值等)。 可以使用将报告输出到标准输出或发送到 。 ...

    java注解源码-java-custom-annotation:教程的源代码如何创建自定义Java批注

    Java注解是Java编程语言中的一个重要特性,它允许程序员在代码中嵌入元数据,这些元数据可以被编译器或运行时环境用于各种目的,如验证、代码生成、持久化等。本教程将深入探讨如何创建自定义的Java注解,并通过源...

    Java标准版的EJB Persistence(三)

    在实际开发中,了解和熟练运用JPA的各种特性,如批注、关系映射和级联操作,对于构建高效、可扩展的Java应用至关重要。 总之,Java标准版的EJB Persistence(三)提供了深入理解JPA及其在实际场景中应用的洞察,对于...

    大型Java源码-Java-Annotation-Study:有关我们在实践中进行大规模Java注释研究的源代码和数据

    为了填补这一空白,我们对GitHub上托管的1,094个开源项目进行了关于Java批注的首次大规模实证研究。 我们的研究系统地研究了注释的使用,注释的演变和注释的影响,并产生了10个有趣的发现,这些发现对开发人员,研究...

    jackson-annotations:Jackson数据处理器的核心注释(仅依赖于jackson-core的注释)

    Jackson批注支持完全继承:这意味着您可以“覆盖批注定义”,而不仅是类批注,还可以是方法/字段批注! Maven,Java程序包 所有注释都在Java包com.fasterxml.jackson.annotation 。 要使用注释,您需要使用Maven...

    commons-cli-annotations:通过注释解析命令行选项

    该库使您可以使用批注来解析命令行参数。 它在后端使用了健壮的 。 许可Apache 2.0 蚂蚁的例子 这里将使用Java应用程序Ant来说明如何创建所需的选项。 以下是使用选项注释对选项的定义: import ...

    schema-generator:一个命令行工具,用于从利用语法验证批注的.class文件生成JSON模式。

    批注(Annotations)是Java提供的一种元数据机制,允许在代码中添加额外的信息,而这些信息可以被编译器或运行时环境用于验证、处理或生成代码。通过使用语法验证批注,开发者可以指导schema-generator如何正确构建...

    JPA 的 批 注 参 考

    JPA通过使用批注(Annotations)来配置实体类,将这些类映射到数据库表,从而实现数据的存取。 **批注(Annotations)** 在JPA中扮演着至关重要的角色,它们是元数据的一种形式,用来提供关于类、字段或方法的附加...

    JPA大全之经典全集

    JPA批注(Annotations)是声明式地将ORM元数据附加到Java类和属性上的方式。常见的批注有`@Entity`(定义实体类)、`@Table`(指定映射的数据库表)、`@Id`(定义主键)、`@GeneratedValue`(自动生成主键)、`@...

    Cayenne annotations-开源

    Cayenne对象关系映射框架的Java批注。 当前仅用于验证,例如“最大”,“长度”,“电子邮件”。 基于OVal

    detect-experimental-and-beta-code:这是一个IntelliJAndroid Studio IDE插件,用于检测带有@Experimental和@Beta批注的代码,并在使用时在装订线上显示自定义图标

    用于实验性和Beta Java批注的IDE图标 这是一个IntelliJ / Android Studio IDE插件,用于检测带有@Experimental和@Beta批注的代码,并在使用时在装订线上显示自定义图标。 请注意,方法switchMapSingle()带有io....

    JPA所有教学资料.rar

    在JPA中,**批注(Annotations)** 是用来描述数据模型和持久化行为的关键元素。例如,`@Entity` 注解标记一个类作为实体,`@Table` 定义实体对应的数据库表,`@Id` 指定主键字段,`@GeneratedValue` 控制主键生成...

    WebRoute-custom-annotation:使用自定义批注将浏览器请求路由到特定处理程序方法的小型Web服务器

    使用Java 8的内置Web服务器。 您的任务是创建一个名为@WebRoute的自定义批注,该批注可用于批注方法。 用@WebRoute("path")注释的方法将是您的HTTP请求处理程序。 每当网络服务器接受的请求与@WebRoute批注中的“ ...

Global site tag (gtag.js) - Google Analytics