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