作者: 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数组,如果你想要将批注限制为一系列语言元素的话。
分享到:
相关推荐
JPA通过使用批注(Annotations)来配置实体的行为,使得无需编写XML配置文件即可实现ORM功能。批注是元数据的一种形式,它们直接嵌入到Java源代码中,并在运行时由JPA提供程序解析以执行相应的操作。 1. **实体批注...
GraphQL-Java批注 是一个很棒的库,但是它的语法有点冗长。 该库为GraphQL模式定义提供了基于注释的语法。 如果您想使用使用graphql-java-annotations创建graphql spring引导服务器的工具,则可以查看库。 目录 ...
JPA的核心特性是使用批注(annotations)来配置实体的行为。批注是一种元数据,直接在Java源代码中添加,编译后在运行时被JPA持久化提供商解释以管理对象关系映射。 以下是JPA批注的一些主要类别和用法: 1. **...
批注是怎么做的? 也可以看看 从官方导入 参考 测试 $ /gradelw clean assembleRelease $ cd proguard-annotations-app/build/outputs/apk $ unzip proguard-annotations-app-release-unsigned.apk $ dex2jar ...
GraphQL Java批注订阅服务器 这是使用Spring Boot和GraphQL-Java-Annotations库的graphql服务器的一个漂亮实现(不是这样)。 根据graphql-ws协议,它还使用graphql-java v7.0和Websocket实现了GraphQL订阅。 欢迎您...
简单的Java CSV读取器/写入器该软件包提供了一些Java类,以帮助使用Java批注读取和写入CSV文件。 有关更多信息,请访问。 在源代码中,有一个。 可以在主页上找到在线文档,包括 。 源可以从。 Maven软件包通过发布 ...
在Java 5中,Annotations(批注)的引入极大地简化了这一过程。本教程主要关注如何使用EJB 3.0的持久化特性,现在通常称为JPA,来持久化对象,特别是通过Hibernate的EntityManager和Annotations将简单的Person和...
#MMTA注释# 该项目定义了一组Java批注,这些批注允许监视Java类,方法或类的字段的状态。 例如,在方法声明之前添加@Monitor批注以报告方法状态(调用时,返回值等)。 可以使用将报告输出到标准输出或发送到 。 ...
Java注解是Java编程语言中的一个重要特性,它允许程序员在代码中嵌入元数据,这些元数据可以被编译器或运行时环境用于各种目的,如验证、代码生成、持久化等。本教程将深入探讨如何创建自定义的Java注解,并通过源...
在实际开发中,了解和熟练运用JPA的各种特性,如批注、关系映射和级联操作,对于构建高效、可扩展的Java应用至关重要。 总之,Java标准版的EJB Persistence(三)提供了深入理解JPA及其在实际场景中应用的洞察,对于...
为了填补这一空白,我们对GitHub上托管的1,094个开源项目进行了关于Java批注的首次大规模实证研究。 我们的研究系统地研究了注释的使用,注释的演变和注释的影响,并产生了10个有趣的发现,这些发现对开发人员,研究...
Jackson批注支持完全继承:这意味着您可以“覆盖批注定义”,而不仅是类批注,还可以是方法/字段批注! Maven,Java程序包 所有注释都在Java包com.fasterxml.jackson.annotation 。 要使用注释,您需要使用Maven...
该库使您可以使用批注来解析命令行参数。 它在后端使用了健壮的 。 许可Apache 2.0 蚂蚁的例子 这里将使用Java应用程序Ant来说明如何创建所需的选项。 以下是使用选项注释对选项的定义: import ...
批注(Annotations)是Java提供的一种元数据机制,允许在代码中添加额外的信息,而这些信息可以被编译器或运行时环境用于验证、处理或生成代码。通过使用语法验证批注,开发者可以指导schema-generator如何正确构建...
JPA通过使用批注(Annotations)来配置实体类,将这些类映射到数据库表,从而实现数据的存取。 **批注(Annotations)** 在JPA中扮演着至关重要的角色,它们是元数据的一种形式,用来提供关于类、字段或方法的附加...
JPA批注(Annotations)是声明式地将ORM元数据附加到Java类和属性上的方式。常见的批注有`@Entity`(定义实体类)、`@Table`(指定映射的数据库表)、`@Id`(定义主键)、`@GeneratedValue`(自动生成主键)、`@...
Cayenne对象关系映射框架的Java批注。 当前仅用于验证,例如“最大”,“长度”,“电子邮件”。 基于OVal
用于实验性和Beta Java批注的IDE图标 这是一个IntelliJ / Android Studio IDE插件,用于检测带有@Experimental和@Beta批注的代码,并在使用时在装订线上显示自定义图标。 请注意,方法switchMapSingle()带有io....
在JPA中,**批注(Annotations)** 是用来描述数据模型和持久化行为的关键元素。例如,`@Entity` 注解标记一个类作为实体,`@Table` 定义实体对应的数据库表,`@Id` 指定主键字段,`@GeneratedValue` 控制主键生成...
使用Java 8的内置Web服务器。 您的任务是创建一个名为@WebRoute的自定义批注,该批注可用于批注方法。 用@WebRoute("path")注释的方法将是您的HTTP请求处理程序。 每当网络服务器接受的请求与@WebRoute批注中的“ ...