2009-04-30 7 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に設定ファイルがあるかもしれません。しかし、ここではアノテーションで同じことをやっています。そして、私は、使用しているライブラリとそのライブラリがどのようにアノテーションを定義しているかによって、アノテーションの動作が異なることを前提としています。だから、@永続性はJDOライブラリの中の一つのことを意味するかもしれないが、ある他のライブラリの中の別のものを意味するかもしれない。 – Bijou

+0

はい。たとえば、Hibernateでは、.hbm.xmlファイルを使用してこの設定を行うか、JPA注釈を使用できます。 別のライブラリで指定されたアノテーションを使用するのは、ライブラリの半共通です。この例では、JDOはいくつかのライブラリがサポート/実装するJava仕様です。したがって、JDOアノテーションを読み込むのはGoogle App Engineのデータストアです。 しかし、彼らは別の意味を持っていることはあまりありません。もちろん、これは完全に可能であり、プログラム的に(いくつかのメソッドを呼び出す)よりメタデータ(注釈)を使ってこれを行う方が簡単です。 – millimoose

0

これらはJava Data Objects APIから来たと思います。これは、EJB3が達成しようとしているものとある程度重複するAPIです。同じ概念、異なる構文とツール。

あなたは一般的に注釈を熟知していない場合は、チェックJava tutorial.

関連する問題