【问题标题】:What function do these Java annotations serve?这些 Java 注释有什么作用?
【发布时间】:2009-04-30 19:47:41
【问题描述】:

我仍然不清楚 Java 中注释的目的。最初我认为它们只是用作文档。但是从Google App Engine Datastore 看这个文档,我不太确定。 @PersistenceCapable(identityType = IdentityType.APPLICATION) 看起来更像是一个方法签名。

这种注释的目的是什么?它有什么作用?

import java.util.Date;
import javax.jdo.annotations.IdGeneratorStrategy;
import javax.jdo.annotations.IdentityType;
import javax.jdo.annotations.PersistenceCapable;
import javax.jdo.annotations.Persistent;
import javax.jdo.annotations.PrimaryKey;

@PersistenceCapable(identityType = IdentityType.APPLICATION)
public class Employee {
    @PrimaryKey
    @Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
    private Long id;

    @Persistent
    private String firstName;

    @Persistent
    private String lastName;

    @Persistent
    private Date hireDate;

    public Employee(String firstName, String lastName, Date hireDate) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.hireDate = hireDate;
    }

    // Accessors for the fields.  JDO doesn't use these, but your application does.

    public Long getId() {
        return id;
    }

    public String getFirstName() {
        return firstName;
    } 

    // ... other accessors...
}

【问题讨论】:

    标签: java annotations


    【解决方案1】:

    它们是源级元数据。它们是一种向非代码代码添加信息的方式,并且很容易被机器处理。

    在您的示例中,它们用于为该实体类型配置对象关系映射。例如,id 字段应该是该对象的主键,并且 firstName、lastName 和hireDate 应该存储在数据库中。 (将这些字段与某些瞬态对象状态区分开来。)

    GAE 对 JDO 的支持需要知道您将尝试在数据库中存储哪些对象。它通过查看代码中的类,查找带有@PersistenceCapable 注释的类来做到这一点。

    通常,它们用于替换您之前使用外部配置文件的位置; Java 标准库具有读取代码中注释的工具,这使得它们比滚动您自己的配置文件管道更容易处理,并免费为您提供 IDE 支持。

    【讨论】:

    • 好的,所以这个类是定义模型的一种简写方式。正如您所说,在过去,您可能在 Struts 中有一个配置文件,您可以在其中使用文本符号来配置您的模型。但是在这里我们用注释做同样的事情。我假设注释的工作方式因您使用的库以及该库如何定义注释的工作方式而异。因此,@Persistent 在 JDO 库中可能意味着一件事,但在其他库中可能是另一件事。
    • 是的。例如,在 Hibernate 中,您可以使用 .hbm.xml 文件进行此配置,也可以使用 JPA 注释。一个库使用另一个库指定的注释是半常见的。在这种情况下,JDO 是多个库支持/实现的 Java 规范。所以它是读取 JDO 注释的 Google App Engine 数据存储。不过,它们具有不同含义的情况并不常见。这当然是完全可能的,而且通过元数据(注解)比编程(调用一些方法)更容易。
    【解决方案2】:

    可以使用Annotation Processing Tool APIs 处理注释以自动生成样板代码。

    【讨论】:

      【解决方案3】:

      我认为这些来自Java Data Objects API。它是一个与 EJB3 应该完成的功能在一定程度上重叠的 API。相同的概念,不同的语法和工具。

      如果您对一般的注解不熟悉,请查看Java tutorial.

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-23
        • 2010-11-28
        • 2015-07-04
        • 2011-12-31
        相关资源
        最近更新 更多