Sie können Annotationen auf Klassen-, Methoden- und Feldebene in den Quellcode aufnehmen.
Annotationen verwenden
EJB 3.1 und Java™ Persistence API verwenden
Metadatenannotationen. Dieses Feature wurde in J2SE 5.0 eingeführt. Eine Annotation besteht aus dem Zeichen "@", gefolgt von einem Annotationstyp.
Auf diesen folgt in manchen Fällen eine Liste von Element/Wert-Paaren in Klammern.
Die EJB 3.1-Spezifikation definiert verschiedene Annotationstypen wie die folgenden:
- Komponentendefinierende Annotation, wie z. B. @Stateless,
die den Bean-Typ angibt.
- @Remote und @Local geben an, ob
auf eine Bean über Fernzugriff oder lokal zugegriffen werden kann.
- @TransactionAttribute gibt Transaktionsattribute an.
- @MethodPermissions, @Unchecked
und @SecurityRoles geben Sicherheits- und
Methodenberechtigungen an.
JPA (Java Persistence API) fügt
Annotationen hinzu, die sich speziell auf die Erstellung von
Entitäten beziehen, wie z. B.:
- @Entity ist eine komponentendefinierende
Annotation, die angibt, dass es sich bei einer Klasse um eine Entität handelt.
- @Table gibt die in der Klasse zu verwendende Datenquelle an.
Anmerkung: JPA-Zuordnungsannotationen (wie z. B. @Id und @Column)
können auf Felder und Methoden angewendet werden, aber für eine
bestimmte Entitätsklasse können sie nur auf Felder oder Methoden
angewendet werden. Das bedeutet, dass entweder alle Annotationen auf
Felder oder alle Annotationen auf Methoden angewendet
werden müssen. Felder können nur die Sichtbarkeit "Private", "Protected" oder
"Package" haben und die Clients einer Entität dürfen nicht direkt auf
die Felder zugreifen, d. h., Sie müssen öffentliche Getter und Setter
definieren.
- @MethodPermissions, @Unchecked
und @SecurityRoles geben Sicherheits- und
Methodenberechtigungen an.
Funktionsumfang und Platzierung von Annotationen
Annotationen
werden auf Klassen-, Schnittstellen-, Methoden- oder Feldebene ausgeführt.
Komponentendefinierende Annotationen (wie
@Stateless oder
@Entity) sind beispielsweise Annotationen auf Klassenebene und werden im
Kommentarabschnitt vor der Klassendeklaration eingefügt:
package com.ibm.websphere.ejb3sample.counter;
import javax.ejb.Stateless;
import javax.interceptor.Interceptors;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@Stateless
@Interceptors ( Audit.class )
public class StatelessCounterBean implements LocalCounter, RemoteCounter {
Die Reihenfolge dieser Annotationen
ist nicht von Bedeutung. Üblicherweise wird die komponentendefinierende Annotation vor anderen Annotationen platziert, aber diese Platzierung ist
nicht erforderlich. Annotationen auf Methoden- und Feldebene erscheinen innerhalb der Klasse oder Methode:
public class JPACounterEntity {
@Id
private String primarykey = "PRIMARYKEY";
private int value = 0;