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.
Im Frühjahr gibt es die folgenden drei Arten von DI. (S.23)
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;
}
}
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;
}
}
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;
}
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. |
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)
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.
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.
@Component
public class UserServiceImpl implements UserService {
@PostConstruct
void pupulateCache() {
//Cache-Generierungsprozess
}
}
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
}
}
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
[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