Singleton
Das Singleton-Pattern gewährleistet, dass von einer Klasse nur genau eine Instanz existiert.
Es stellt einen globalen Zugriffspunkt auf diese einzige Instanz bereit.
I. Allgemeines Pattern (GoF)
Important
Singleton-Eigenschaften:
- Nur eine Instanz der Klasse
- Globaler Zugriffspunkt
- Lazy Initialization (auf Anfrage erstellen)
- Thread-Safety beachten
Example
public class DatabaseConnection {
private static DatabaseConnection instance;
// Private Konstruktor verhindert direkte Instanziierung
private DatabaseConnection() {}
// Thread-safe Singleton
public static synchronized DatabaseConnection getInstance() {
if (instance == null) {
instance = new DatabaseConnection();
}
return instance;
}
}
// Verwendung
DatabaseConnection db = DatabaseConnection.getInstance();
Warning
Kann zu tight coupling führen und Testing erschweren.
II. Jakarta-EE-Annotation @Singleton (EJB)
@Singletonmarkiert eine EJB als globale Einzelinstanz.Genau eine Instanz für die ganze App.
Eigenschaften
- Exakt 1 Instanz im WildFly
- Mehrere Threads rufen sie parallel auf
- Thread-Safety musst du selbst sicherstellen
- Default: Lazy (erst beim 1. Aufruf erstellt)
- Mit
@Startup→ eager (beim Deploy)
Beispiel
@Singleton
public class CounterBean {
private final AtomicInteger count = new AtomicInteger(0);
public int incrementAndGet() {
return count.incrementAndGet(); // thread-safe!
}
}
Warning
Normales int count++ führt bei mehreren Threads zu Datensalat. Nutze AtomicInteger oder synchronized.
III. .NET-Pendant
AddSingleton.