7

我仍然不清楚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...
}
4

3 回答 3

9

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

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

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

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

于 2009-04-30T19:51:27.590 回答
1

可以使用注释处理工具 API 处理注释以自动生成样板代码。

于 2009-04-30T19:53:48.160 回答
0

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

如果您一般不熟悉注解,请查看Java 教程。

于 2009-04-30T19:52:15.310 回答