[JAVA] Spring Framework Zusammenfassung - Über DI

Lesen Sie das Buch [Spring gründliche Einführung in die Java-Anwendungsentwicklung mit Spring Framework](https://www.amazon.co.jp/Spring Gründliche Einführung - Spring-Java-Anwendungsentwicklung mit Framework-NTT Data Co., Ltd./dp/4798142476/) Und ich habe die Teile zusammengefasst, die ich für wichtig halte. (Ich habe es ein wenig unabhängig ergänzt.) Die Anzahl der Seiten des Nachschlagewerks wird aufgelistet, damit Sie später darauf zurückblicken können.

Diesmal ist es ein Artikel über DI.

Arten der Injektion

Im Frühjahr gibt es die folgenden drei Arten von DI. (S.23)

Setter-Injektion

DI für Setter-Argumente.

Verdienst: DI kann durchgeführt werden, während der vorhandene Setter beibehalten wird. Nachteil: Es ist problematischer als die Feldinjektion.

@Component
public class UserServiceImpl implements UserService {
    private UserRepository userRepository;
    private PasswordEncoder passwordEncoder;
    
    @Autowired
    public void setUserRepository(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    
    @Autowired
    public void setPasswordEncoder(PasswordEncoder passwordEncoder) {
        this.passwordEncoder = passwordEncoder;
    }
}

Konstruktorinjektion

DI für Konstruktorargumente.

Vorteil: Sie können dem Feld einen letzten Modifikator hinzufügen, um es unveränderlich zu machen. Nachteil: Es ist problematischer als die Feldinjektion.

@Component
public class UserServiceImpl implements UserService {
    private final UserRepository userRepository;
    private final PasswordEncoder passwordEncoder;
    
    @ConstructorProperties({"userRepository", "passwordEncoder"})
    public UserServiceImpl(UserRepository userRepository, PasswordEncoder passwordEncoder) {
        this.userRepository = userRepository;
        this.passwordEncoder = passwordEncoder;
    }
}

Feldinjektion

Wie DI für ein Feld in einer Klasse.

Verdienst: Die Menge an Code ist gering und am einfachsten zu schreiben. Nachteil: Der Code soll DI machen.

@Component
public class UserServiceImpl implements UserService {
    @Autowired
    private UserRepository userRepository;
    @Autowired
    private PasswordEncoder passwordEncoder;
}

Ziel des Komponentenscans

Beim Komponentenscan wird der Klassenlader gescannt und eine bestimmte Klasse automatisch im DI-Container registriert. (S.35)

Standardmäßig werden Klassen mit den folgenden Anmerkungen als Ziel ausgewählt.

Anmerkung Erläuterung
@Controller Eine Komponente, die im MVC-Muster die Rolle von C spielt. Die Komponente, an die diese Anmerkung angehängt ist, verarbeitet die Anforderung / Antwort vom Client.
@Service Eine Anmerkung, die angibt, dass es sich um eine Komponente handelt, die die Geschäftslogik implementiert.
@Repository Eine Komponente, die die Verarbeitung in Bezug auf die Datenpersistenz ermöglicht. Implementieren Sie die Daten-CRUD-Verarbeitung mit ORM usw.
@Component Komponenten, die für die oben genannten drei nicht gelten. Geben Sie an Utility-Klasse usw.
@Configuration Schreiben Sie vor der Klassendeklaration. Diese Anmerkung gibt an, dass diese Klasse für das Festlegen der Bean verantwortlich ist. Fügen Sie dies immer der Bean-Konfigurationsklasse hinzu.
@RestController Geben Sie an den Controller für die Web-API, die JSON, XML usw. zurückgibt.
@ControllerAdvice Fügen Sie diese Anmerkung zur Behandlung von Ausnahmen über Controller hinweg zur Klasse für die Ausnahmebehandlung hinzu. Wird für die ExceptionHandler-Klasse verwendet.
@ManagedBean Ursprünglich handelt es sich um eine von JSF verwaltete verwaltete Bean. Frühling@Es scheint dieselbe Bedeutung zu haben wie beim Anhängen einer Komponente.
@Named Ursprünglich Java(EE)Es repräsentiert das Injektionsziel im System. Frühling@Es scheint dieselbe Bedeutung zu haben wie beim Anhängen einer Komponente.

Bean Scope

Im Frühjahr heißt die im DI-Container registrierte Komponente ** "Bean" ** und die Konfiguration "Bean-Definition". Das Abrufen einer Bean aus einem DI-Container wird als "Nachschlagen" bezeichnet. (S.17)

Im Spring Framework verfügbare Bereiche

Eine Liste der im Frühjahr verfügbaren Scope-Spezifikationen. (S.39)

Umfang Erläuterung
singleton
(Standard)
Eine Bean-Instanz wird erstellt, wenn der DI-Container gestartet wird, und dieselbe Instanz wird gemeinsam genutzt und verwendet. Wenn der Bereich nicht festgelegt ist, wird er als einzelne Tonne behandelt.
prototype Erstellen Sie jedes Mal eine Instanz, wenn eine Bean erfasst wird. Verwenden Sie für Thread-unsichere Beans den Prototyp, da der Singleton-Bereich nicht verwendet werden kann.
session Erstellen Sie für jede HTTP-Sitzung eine Bean-Instanz. Gültig nur für Webanwendungen.
request Erstellen Sie für jede HTTP-Anforderung eine Bean-Instanz. Gültig nur für Webanwendungen.
globalSession Erstellen Sie eine Instanz für jede globale Sitzung in der Portlet-Umgebung. Gültig nur für Webanwendungen, die Portlets unterstützen.
application Erstellen Sie eine Bean-Instanz für jeden Servlet-Kontext. Gültig nur für Webanwendungen.
Benutzerdefinierter Bereich(Eindeutige Benennung) Erstellen Sie eine Bean-Instanz mit Ihren eigenen definierten Regeln.

Seien Sie vorsichtig, wenn Sie verschiedene Zielfernrohre in derselben Klasse injizieren. (S.41)

Sie können sich vorstellen, welche Art von Site eine Webanwendung ist, die Portlets unterstützt, indem Sie im "Portlet Web" nach Bildern suchen.

Bohnen-Lebenszyklus

Der Lebenszyklus einer Bohne, die von einem DI-Container verwaltet wird, besteht aus den folgenden drei Phasen. (S.47)

Von den oben genannten drei Phasen ist die meiste Zeit die Nutzungsphase.

Initialisierungsphase

  1. Lesen Sie Bean → Bereiten Sie die Generierung von Bean vor.
  2. Abhängigkeitsauflösung → Bean-Instanzgenerierung und Injection-Ausführung.
  3. Nachkonstruktion → Verarbeitung nach Instanzerstellung. Sie können die injizierte Bohne verwenden.
@Component
public class UserServiceImpl implements UserService {
    @PostConstruct
    void pupulateCache() {
        //Cache-Generierungsprozess
    }
}

Endphase

In der Endphase wird ein Vorzerstörungsprozess namens "Vorzerstörung" durchgeführt. (S.50)

@Component
public class UserServiceImpl implements UserService {
    @PreDestroy
    void clearCache() {
        //Cache-Verwerfungsprozess
    }
}

Referenzquelle

Seite? ˅

Implementierung von DI durch Annotation (2/5): Einführung in Spring Framework für Anfänger Verschiedene Rückgabewerte im Spring MVC-Controller - Qiita Außergewöhnliche Behandlung in Spring-Qiita Zeitverlust des Ingenieurs: Verwalten von verwalteten Bohnen im Frühjahr mit Spring + JSF

Bücher

[Gründliche Einführung in die Entwicklung von Spring Java-Anwendungen mit Spring Framework](https://www.amazon.co.jp/ Gründliche Einführung in die Entwicklung von Spring-Java-Anwendungen mit Spring-Framework-NTT Data Co., Ltd./dp/4798142476/)

Recommended Posts

Spring Framework Zusammenfassung - Über DI
[Java] Spring DI ③
Anmerkungen zur Spring Framework-Studie [Teil 1] DI-Container
[Spring Framework] Konfigurationsaufteilung
Mehrsprachige Unterstützung für Spring Framework
1. Starten Sie Spring Framework von 1
Über DI des Frühlings ①
Erster Frühlingsstiefel (DI)
Über DI des Frühlings ②
Wichtige Änderungen im Zusammenhang mit dem Spring Framework 5.0 DI-Container
Frühlingsgrundlagen ~ DI Edition ~
Spring Framework Selbststudium Memo series_1
Informationen zum Spring Framework-Kontextfehler
Einführung in Spring Boot ~ ~ DI ~
[Java] Wie Spring DI funktioniert
Informationen zu Anmerkungen zu Spring DI
Spring Framework 5.0 Zusammenfassung der wichtigsten Änderungen
Frühlingsrahmen Einfaches Studienmemo (2): AOP
Spring Framework-Tools für Java-Entwickler
[Java] Spring DI ④ - Lebenszyklusverwaltung
Testen Sie den Spring Framework Controller mit Junit
Einführung der Basisauthentifizierung in Heroku [Spring Framework]
Wichtige Änderungen im Zusammenhang mit Spring Framework 5.0 Test
XML-Definition der Spring Framework-Bean: benutzerdefiniertes Tag
Warum Frühling als leichtes Gerüst betrachten
Informationen zur ersten Anzeige von Spring Framework
Wichtige Änderungen in der Kernfunktionalität von Spring Framework 5.0
Funktionen des Spring Frameworks für Java-Entwickler
DI SessionScope Bean im Spring Boot 2-Filter