Abhängigkeitsspritze. Anstatt eine Instanz der abhängigen Klasse innerhalb der abhängigen Klasse zu erstellen Haben Sie die abhängige Klasse als Feldvariable der abhängigen Klasse. Übergeben Sie daher die abhängige Klasse von außen im Konstruktor usw. Gewöhne dich daran, anstatt es zu lernen.
Es gibt viele Anmerkungen zu DI, aber es ist leicht zu verstehen, wenn Sie der Meinung sind, dass sie grundsätzlich in eine der folgenden drei Stufen eingeteilt sind. Was sind die drei Stufen von DI?
--Definieren der Klasse, die im DI-Container registriert werden soll
Ist.
Wird als JavaConfig bezeichnet. --Erstellen Sie eine Klasse mit der Annotation @Configuration --Erstellen Sie eine Methode mit @ Bean-Annotation
@Configuration
public class AppConfiguration {
//Registrieren Sie die ServiceImpl-Klasse im DI-Container
@Bean
public Service service() {
return new ServiceImpl();
}
//Registrieren Sie die RepositoryImpl-Klasse im DI-Container
@Bean
public Repository repository() {
return new RepositoryImpl();
}
//Gleiches gilt weiter unten
.
.
.
}
Ist es normal, eine Schnittstelle zu definieren und die Implementierungsklasse in @Configuration zu setzen?
//@Komponentenanmerkung@In der Serviceanmerkung enthalten
@Service
public class ServiceImpl implements Service {
}
** Eigentlich ** registriere die Instanz im DI-Container. Durch Ausführen eines ** Komponentenscans ** wird die Registrierung der Instanz in DI realisiert.
@Configuration
@ComponentScan(basePackages = "jp.co.yahoo")
// @ComponentScan <-Wenn es kleiner als das aktuelle Verzeichnis ist
public class AppConfiguration {
}
Fügen Sie die Annotation @Autowired hinzu. Es gibt die folgenden drei Methoden.
Fügen Sie dem Konstruktor @Autowired hinzu.
Es gibt einen Verdienst. Empfohlene Methode.
private final Service service;
public Controller(Service service) {
this.service = service;
}
@Autowired
private Service service;
private Service service;
@Autowired
public void setService(Service service) {
this.service = service;
}
Die Annotation @SpringBootApplication kann beim Starten der Anwendung hinzugefügt werden. Damit werden viele der oben genannten Anmerkungen ohne Erlaubnis erstellt. Wir werden uns den Prozess unten ansehen.
Referenz
Many Spring Boot developers always have their main class annotated with @Configuration, @EnableAutoConfiguration and @ComponentScan. Since these annotations are so frequently used together (especially if you follow the best practices above), Spring Boot provides a convenient @SpringBootApplication alternative.
The @SpringBootApplication annotation is equivalent to using @Configuration, @EnableAutoConfiguration and @ComponentScan with their default attributes:
package com.example.myproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication // same as @Configuration @EnableAutoConfiguration @ComponentScan
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
** SpringBoot verfügt über eine vordefinierte JavaConfig-Klasse. ** ** ** Wenn Sie darüber nachdenken, ist dies natürlich. Es kann nicht als Framework bezeichnet werden, wenn bei jedem Hinzufügen einer externen Bibliothek eine DI-Zielklasse definiert und die Registrierung im DI-Container wiederholt werden muss.
Die Funktion zum automatischen Registrieren der in dieser Klasse definierten Instanz im DI-Container heißt ** AutoConfiguration **.
--Auto-Konfiguration aktiviert --Die abhängige Bibliothek ist in pom.xml angegeben
** Die automatische Konfiguration kann aktiviert werden, indem eine Klasse mit der Annotation @EnableAutoConfiguration erstellt wird. ** ** ** Fügen Sie im Allgemeinen die Annotation @EnableAutoConfiguration zu einer Klasse hinzu, die die Annotation @Configuration enthält.
Es gibt zwei Punkte beim Erstellen einer Anwendungsstartklasse.
-Add @SpringBootApplication Annotation
@SpringBootAnnotation enthält die folgenden Anmerkungen.
Sie können auch angeben, welche Pakete gescannt werden sollen, indem Sie das Attribut scanBasePackages verwenden.
@SpringBootApplication(scanBasePackages = "com.example")
Durch Hinzufügen der Annotation @SpringBootApplication kann die standardmäßige JavaConfig-Definition und -Registrierung im DI-Container weggelassen werden.
Wenn Sie sich selbst registrieren (wenn Sie den Unterschied zur Standard-JavaConfig hinzufügen) und nur durch Annotation definieren, können Sie sich im DI-Container registrieren, indem Sie einfach die Annotation @Component hinzufügen, und Sie können die Annotation @Autowired einfügen. ..
Ergänzung
――Wenn der Unterschied zu groß ist, müssen Sie JavaConfig selbst definieren, aber derzeit wird es nur durch Anmerkungen definiert.
(Nun, ich denke, Sie müssen sich dessen nicht sehr bewusst sein, da die Ausführungsklasse auf der obersten Ebene platziert ist.)