Webframework/Spring Boot/Dependency Injection in reinem Java ohne Interfaces: Unterschied zwischen den Versionen

Aus Dokument
Zur Navigation springen Zur Suche springen
imported>Import
Version 217
 
Die Seite wurde neu angelegt: „ == 1. Was ist Dependency Injection? == Dependency Injection (DI) ist ein Entwurfsmuster, bei dem Abhängigkeiten (Objekte, die eine Klasse benötigt) von außen bereitgestellt werden, anstatt sie innerhalb der Klasse selbst zu erzeugen. Das erhöht die Flexibilität und Testbarkeit des Codes. == 2. Beispiel ohne DI == <syntaxhighlight lang="java"> class Motor { public void starten() { System.out.println("Motor startet..."); } } class Au…“
 
Zeile 1: Zeile 1:
''Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).''
''Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).''
----
----


== 1. Was ist Dependency Injection? ==
== 1. Was ist Dependency Injection? ==
Dependency Injection (DI) ist ein Entwurfsmuster, bei dem Abhängigkeiten (Objekte, die eine Klasse benötigt) von außen bereitgestellt werden, anstatt sie innerhalb der Klasse selbst zu erzeugen. Das erhöht die Flexibilität und Testbarkeit des Codes.
Dependency Injection (DI) ist ein Entwurfsmuster, bei dem Abhängigkeiten (Objekte, die eine Klasse benötigt) von außen bereitgestellt werden, anstatt sie innerhalb der Klasse selbst zu erzeugen. Das erhöht die Flexibilität und Testbarkeit des Codes.


== 2. Beispiel ohne DI ==
== 2. Beispiel ohne DI ==
 
<syntaxhighlight lang="java">
<syntaxhighlight lang="java">class Motor {
class Motor {
     public void starten() {
     public void starten() {
         System.out.println("Motor startet...");
         System.out.println("Motor startet...");
Zeile 21: Zeile 21:
         System.out.println("Auto fährt los!");
         System.out.println("Auto fährt los!");
     }
     }
}</syntaxhighlight>
}
</syntaxhighlight>
'''Problem:''' Die Klasse <code>Auto</code> ist fest an die Klasse <code>Motor</code> gekoppelt. Ein Austausch ist schwierig.
'''Problem:''' Die Klasse <code>Auto</code> ist fest an die Klasse <code>Motor</code> gekoppelt. Ein Austausch ist schwierig.


== 3. Beispiel mit DI (Konstruktor-Injektion) ==
== 3. Beispiel mit DI (Konstruktor-Injektion) ==
 
<syntaxhighlight lang="java">
<syntaxhighlight lang="java">class Motor {
class Motor {
     public void starten() {
     public void starten() {
         System.out.println("Motor startet...");
         System.out.println("Motor startet...");
Zeile 53: Zeile 54:
         auto.fahren();
         auto.fahren();
     }
     }
}</syntaxhighlight>
}
</syntaxhighlight>
'''Vorteil:''' Die Klasse <code>Auto</code> ist nicht mehr für die Erzeugung des Motors verantwortlich. Der Motor kann leicht ausgetauscht oder gemockt werden.
'''Vorteil:''' Die Klasse <code>Auto</code> ist nicht mehr für die Erzeugung des Motors verantwortlich. Der Motor kann leicht ausgetauscht oder gemockt werden.


== 4. Setter-Injektion ==
== 4. Setter-Injektion ==
 
<syntaxhighlight lang="java">
<syntaxhighlight lang="java">class Auto {
class Auto {
     private Motor motor;
     private Motor motor;


Zeile 73: Zeile 75:
         }
         }
     }
     }
}</syntaxhighlight>
}
</syntaxhighlight>
'''Vorteil:''' Die Abhängigkeit kann auch nach der Instanziierung gesetzt oder geändert werden.
'''Vorteil:''' Die Abhängigkeit kann auch nach der Instanziierung gesetzt oder geändert werden.


== 5. Übung ==
== 5. Übung ==
 
'''Aufgabe:'''  
'''Aufgabe:'''
 
* Erstelle eine Klasse <code>Radio</code> mit einer Methode <code>einschalten()</code>.
* Erstelle eine Klasse <code>Radio</code> mit einer Methode <code>einschalten()</code>.
* Erweitere die Klasse <code>Auto</code> so, dass ein <code>Radio</code> per Konstruktor-Injektion übergeben wird.
* Erweitere die Klasse <code>Auto</code> so, dass ein <code>Radio</code> per Konstruktor-Injektion übergeben wird.
Zeile 85: Zeile 86:


'''Lösungsvorschlag:'''
'''Lösungsvorschlag:'''
 
<syntaxhighlight lang="java">
<syntaxhighlight lang="java">class Radio {
class Radio {
     public void einschalten() {
     public void einschalten() {
         System.out.println("Radio läuft!");
         System.out.println("Radio läuft!");
Zeile 121: Zeile 122:
         auto.fahren();
         auto.fahren();
     }
     }
}</syntaxhighlight>
}
</syntaxhighlight>
 
== Zusammenfassung ==
== Zusammenfassung ==
* Dependency Injection trennt die Erzeugung von Abhängigkeiten von deren Verwendung.
* Dependency Injection trennt die Erzeugung von Abhängigkeiten von deren Verwendung.
* In Java kann DI einfach über Konstruktoren oder Setter umgesetzt werden.
* In Java kann DI einfach über Konstruktoren oder Setter umgesetzt werden.

Aktuelle Version vom 1. März 2026, 19:45 Uhr

Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).



1. Was ist Dependency Injection?

Dependency Injection (DI) ist ein Entwurfsmuster, bei dem Abhängigkeiten (Objekte, die eine Klasse benötigt) von außen bereitgestellt werden, anstatt sie innerhalb der Klasse selbst zu erzeugen. Das erhöht die Flexibilität und Testbarkeit des Codes.

2. Beispiel ohne DI

class Motor {
    public void starten() {
        System.out.println("Motor startet...");
    }
}

class Auto {
    private Motor motor = new Motor(); // direkte Instanziierung

    public void fahren() {
        motor.starten();
        System.out.println("Auto fährt los!");
    }
}

Problem: Die Klasse Auto ist fest an die Klasse Motor gekoppelt. Ein Austausch ist schwierig.

3. Beispiel mit DI (Konstruktor-Injektion)

class Motor {
    public void starten() {
        System.out.println("Motor startet...");
    }
}

class Auto {
    private Motor motor;

    // Dependency Injection über den Konstruktor
    public Auto(Motor motor) {
        this.motor = motor;
    }

    public void fahren() {
        motor.starten();
        System.out.println("Auto fährt los!");
    }
}

// Anwendung
public class Main {
    public static void main(String[] args) {
        Motor motor = new Motor();
        Auto auto = new Auto(motor); // Motor wird von außen injiziert
        auto.fahren();
    }
}

Vorteil: Die Klasse Auto ist nicht mehr für die Erzeugung des Motors verantwortlich. Der Motor kann leicht ausgetauscht oder gemockt werden.

4. Setter-Injektion

class Auto {
    private Motor motor;

    public void setMotor(Motor motor) {
        this.motor = motor;
    }

    public void fahren() {
        if (motor != null) {
            motor.starten();
            System.out.println("Auto fährt los!");
        } else {
            System.out.println("Kein Motor vorhanden!");
        }
    }
}

Vorteil: Die Abhängigkeit kann auch nach der Instanziierung gesetzt oder geändert werden.

5. Übung

Aufgabe:

  • Erstelle eine Klasse Radio mit einer Methode einschalten().
  • Erweitere die Klasse Auto so, dass ein Radio per Konstruktor-Injektion übergeben wird.
  • Beim Aufruf von fahren() soll zuerst das Radio eingeschaltet und dann der Motor gestartet werden.

Lösungsvorschlag:

class Radio {
    public void einschalten() {
        System.out.println("Radio läuft!");
    }
}

class Motor {
    public void starten() {
        System.out.println("Motor startet...");
    }
}

class Auto {
    private Motor motor;
    private Radio radio;

    public Auto(Motor motor, Radio radio) {
        this.motor = motor;
        this.radio = radio;
    }

    public void fahren() {
        radio.einschalten();
        motor.starten();
        System.out.println("Auto fährt los!");
    }
}

public class Main {
    public static void main(String[] args) {
        Motor motor = new Motor();
        Radio radio = new Radio();
        Auto auto = new Auto(motor, radio);
        auto.fahren();
    }
}

Zusammenfassung

  • Dependency Injection trennt die Erzeugung von Abhängigkeiten von deren Verwendung.
  • In Java kann DI einfach über Konstruktoren oder Setter umgesetzt werden.
  • Das Muster erhöht die Flexibilität und Testbarkeit des Codes.

Hinweis: Diese Inhalte wurden mit Unterstützung von Künstlicher Intelligenz erstellt und redaktionell überprüft (Transparenzhinweis gemäß Art. 50 EU AI Act).