这些Java注释有什么功能?

时间:2009-04-30 19:47:42

标签: java annotations

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

3 个答案:

答案 0 :(得分:9)

他们是源级元数据。它们是一种向代码添加信息的方式,这些代码不是代码,而且很容易通过机器处理。

在您的示例中,它们用于为该实体类型配置对象关系映射。它说,例如,id字段应该是该对象的主键,firstName,lastName和hireDate应该存储在数据库中。 (告诉那些字段除了一些瞬态对象状态。)

GAO对JDO的支持需要知道您将尝试在数据库中存储哪些对象。它通过查看代码中的类来查找使用@PersistenceCapable注释的类。

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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