[Java] Spring DI ③
Was machst du mit DI?
- ** Eine von DI verwaltete Klasse finden (Komponentenscan) **
- ** Instanzerstellung und -injektion **
Komponentenscan
- Wenn Spring gestartet wird, wird der Prozess der Suche nach der Klasse mit der von DI verwalteten Zielanmerkung ausgeführt und im DI-Container registriert.
- Die im DI-Container verwaltete Klasse heißt ** Bean **
[Anmerkung zum Scannen]
- @Component
- @Controller
- @Service
- @Repository
- @Configuration
- @RestController
- @ControllAdvice
- @ManagedBean
- @Named
Instanzerstellung und -injektion
- ** Bohnen instanziieren und in einen DI-Behälter injizieren **
- Sammle DI-Zielklassen (Beans) und DI erstellt Instanzen davon (neu)
- Fügen Sie die generierte Instanz mit der folgenden ** @ Autowired-Annotation ** in das Feld ein.
- Feldvariablen
- Konstruktorargumente
- Setter-Argument
- Sie können eine Instanz als Argument übergeben, indem Sie dem Konstruktor @Autowired voranstellen.
- Das Bild lautet "Erstellen Sie eine Instanz jeder Klasse im DI-Container, rufen Sie die Instanz mit getter ab und rufen Sie den Getter des DI-Containers im Feld mit @Autowired auf".
//Bild
public class DependencyInjection{
//Erstellen Sie eine Instanz jeder Klasse
private SampleComponent component = new SampleComponent();
private SampleService service = new SampleService();
//SampleComponent-Instanz-Getter
public static SampleComponent getSampleComponent(){
return component;
}
//SampleService-Instanz-Getter
public static SampleService getSampleService(){
return service;
}
}
- ** Sie können sich die Mühe sparen, eine Factory-Klasse zu erstellen, indem Sie eine Anmerkung wie @Component hinzufügen! ** ** **
Wie setzen Sie es um?
- Anmerkungsbasis
- JavaConfig
- xml
- JavaConfig + Anmerkung
- xml + Anmerkung
Anmerkungsbasis
- Spring registriert automatisch Klassen mit @Component, @Controller usw. im DI-Container
JavaConfig
- Bereiten Sie eine Klasse mit @ Configuration-Annotation vor
- Bereiten Sie eine Getter-Methode mit @ Bean-Annotation in der Klasse vor
- Der Rückgabewert von getter wird im DI-Container als Bean registriert.
- Bereiten Sie im DI-Container die JavaConfig-Klassen- und Bean-Instanzen vor und rufen Sie jede Instanz mit getter am @ Autowired-Speicherort ab.
- Im Gegensatz zur Annotationsbasis wird der Rückgabewert des Getters mit der @ Bean-Annotation vom DI-Container verwaltet.
- Mit anderen Worten, es ist erforderlich, eine Methode für die vom DI-Container verwaltete Instanz vorzubereiten.
- Detaillierte Einstellungen und Umschaltungen sind möglich
JavaConfig + Annotation
- Kommentieren Sie die Klasse, die Sie mit DI verwalten möchten, z. B. @Controller
- Mit JavaConfig nur für die Instanz festlegen, für die Sie detaillierte Einstellungen vornehmen möchten
- Wenn Sie eine kleine Anwendung basierend auf Anmerkungen erstellen und die Skalierung erhöhen oder die Einstellungen wechseln möchten, implementieren Sie sie mit JavaConfig + -Anmerkungen.
XML-Basis
- Machen Sie dasselbe in XML, wie Sie es in JavaConfig festgelegt haben