2009-04-30 70 views
7

我仍然不清楚Java中註釋的用途。起初我以爲他們只是作爲文件。但從Google App Engine Datastore看這個文檔,我不太確定。 @PersistenceCapable(identityType = IdentityType.APPLICATION)看起來更像是一個方法簽名。這些Java註釋的功能是什麼?

這種類型的註釋的目的是什麼?它有什麼作用?

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... 
} 

回答

9

它們是源代碼級元數據。它們是將信息添加到代碼中的一種方法,並且這很容易被機器處理。

在您的示例中,它們用於配置該實體類型的對象關係映射。這就是說,例如,id字段應該是該對象的主鍵,並且firstName,lastName和hireDate應該存儲在數據庫中。 (告訴除了某些瞬態對象狀態以外的那些字段。)

對JDO的GAE支持需要知道您將嘗試在數據庫中存儲哪些對象。它通過查看代碼中的類來尋找那些用@PersistenceCapable註釋的類。

通常,它們用於替換之前使用外部配置文件的位置; Java標準庫有工具可以讀取代碼中的註釋,這使得它們比處理自己的配置文件更容易處理,並且免費獲得IDE支持。

+1

好吧,那麼這個類就是定義你的模型的一種速記方式。在過去,如您所說,您可能在Struts中有一個配置文件,您可以使用文本符號來配置您的模型。但是在這裏我們用註釋做同樣的事情。我假設註釋的工作方式取決於您使用的庫以及該庫如何定義註釋工作。所以,@Persistent可能意味着JDO庫中的一件事,但在另一些庫中則是另一件事。 – Bijou 2009-04-30 19:58:21

0

我認爲這些來自Java Data Objects API。這是一個與EJB3應該完成的程度重疊的API。相同的概念,不同的語法和工具。

如果你不熟悉一般的註解,檢查Java tutorial.