[Java] [Spring] Spring Boot Das mysteriöse Hamarineta der Abhängigkeitsinjektion

Es mag für diejenigen, die es wissen, selbstverständlich sein, aber ich werde es hier zeigen, weil es ein großer Schmerz war.

Umgebung

Annahme

Es gab solche Repository-Schnittstellen.

Für Unit-Tests habe ich eine Konfigurationsklasse erstellt, die ein Modell jedes Repositorys zurückgibt.

MyConfig.java


@Configuration
public class MyConfig {
    @Bean 
    public MenuRepository menuRepository() {
        return Mockito.mock(MenuRepository.class);
    }

    @Bean 
    public CategoryRepository categoryRepository() {
        return Mockito.mock(CategoryRepository.class);
    }

    @Bean 
    public UserRepository userRepository() {
        return Mockito.mock(UserRepository.class);
    }
}

Der Test des Injektionsziels ist wie folgt.

MyTest.java


//Abkürzung
public class MyTest {
    @Autowired
    private MenuRepository menuRepository;

    @Autowired
    private CategoryRepository categoryRepository;

    @Autowired
    private UserRepository userRepository;
}

Geheimnisvolle Bewegung

Die @ categoryRepository-Methode @Bean wird aufgerufen, aber keine andere @ Bean-Methode wird aufgerufen.

Infolgedessen wird nur "Category Repository" am Injektionsziel verspottet. .. ..

Betrachtet man den Inhalt des Containers, so gibt es nur zwei "CategoryRepository" (Schein und Original) und nur eine andere.

Lösung

Durch Ändern des Methodennamens werden jetzt alle @ Bean-Methoden sicher aufgerufen.

MyConfig.java


@Configuration
public class MyConfig {
    @Bean 
    @Primary
    public MenuRepository menuRepositoryBean() {
        return Mockito.mock(MenuRepository.class);
    }

    @Bean 
    @Primary
    public CategoryRepository categoryRepositoryBean() {
        return Mockito.mock(CategoryRepository.class);
    }

    @Bean 
    @Primary
    public UserRepository userRepositoryBean() {
        return Mockito.mock(UserRepository.class);
    }
}

Außerdem habe ich eine Fehlermeldung erhalten, dass der Typ aktiviert ist, und habe daher "@ Primary" hinzugefügt.

Warum passiert das ...? ??

Recommended Posts

[Java] [Spring] Spring Boot Das mysteriöse Hamarineta der Abhängigkeitsinjektion
Spring Dependency Injection mit Java, Kotlin
[Java] Thymeleaf Basic (Spring Boot)
CICS-Java-Anwendung ausführen- (4) Spring Boot-App
[Java] [Spring] Spring Boot 1.4-> 1.2 Downgrade Hinweis
Elastische Bohnenstange (Java) + Spring Boot + https
[Java] LINE-Integration mit Spring Boot
Frühling Java
Erstellen Sie mit IntelliJ ein Java Spring Boot-Projekt
Aufbau der Spring Boot + Docker Java-Entwicklungsumgebung
Federeinspritzung verschieden
Fordern Sie Spring Boot heraus
Java-Tipps - Erstellen Sie mit Gradle ein Spring Boot-Projekt
[Java] Hallo Welt mit Java 14 x Spring Boot 2.3 x JUnit 5 ~
Spring Boot Form
[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.
Spring Boot Denken Sie daran
gae + frühlingsstiefel
Konstruktionsverfahren für LINE Bot x Java (Spring Boot)
[Java] Spring DI ③
[Java] [Spring Boot] Geben Sie das Laufzeitprofil an - Spring Boot beginnend mit NetBeans
[Java] So lassen Sie die Federkonstruktorinjektion mit Lombok weg
Probieren Sie das Gesetz der Abhängigkeitsumkehr mit mehreren Spring Boot-Projekten aus
SPRING BOOT Lernaufzeichnung 01
Frühlingsstiefel + Heroku Postgres
Schreiben von Frühlingsstiefel-Memos (1)
Erster Frühlingsstiefel (DI)
SPRING BOOT Lernprotokoll 02
Spring Boot2 Spickzettel
Spring Boot-Ausnahmebehandlung
Spring Boot Servlet-Zuordnung
Spring Boot Entwicklung-Entwicklungsumgebung-
Spring Boot-Lernverfahren
Spring Boot lernen [Anfang]
Schreiben von Spring Boot-Memos (2)
Spring Boot 2.2 Dokumentzusammenfassung
[Spring Boot] DataSourceProperties $ DataSourceBeanCreationException
Spring Boot 2.3 Verfügbarkeit von Anwendungen
Spring Boot Tutorials Themen
Dolch2 - Android-Abhängigkeitsinjektion
Injektion von Java-Tabellenausdrücken
Mit Spring Boot herunterladen
Ändern Sie das Injektionsziel für jede Umgebung mit Spring Boot 2
Behandeln Sie die Java 8-Datums- und Uhrzeit-API mit Thymeleaf mit Spring Boot
[Java] Stellen Sie die Spring Boot-Anwendung für den Azure App Service bereit
Aufrufen und Verwenden der API in Java (Spring Boot)
Einführung von Spring Boot2, einem Java-Framework für die Webentwicklung (für Anfänger)
Domänengesteuerte Entwicklung mit Java und Spring Boot-Layer und Modulabteilung
[Java] Beispielprojekt zum Entwickeln von Webanwendungen mit Spring Boot