[JAVA] Über den Frühling ③

Zweck dieses Artikels

Dies ist eine Fortsetzung von About Spring②. Dieses Mal werde ich die Bohnenassoziation kurz zusammenfassen.

Was ist Bean Assoziation?

Welches Objekt verhält sich im vorherigen und im vorletzten Kapitel wie eine Bean? Ich habe die Spezifikation und das Verhalten des DI-Containers zusammengefasst, in dem er gespeichert ist. In der grundlegenden Bean-Injection-Methode wurde die getBean-Methode mit der Bean-Klasse als Argument für die ContextConfiguration-Klasse aufgerufen. Wie wird die Bean jedoch beim automatischen Verdrahten mit @Autowired angegeben? Ist es?

① Lösung nach Typ

Übersicht → Bestimmen Sie anhand des bei der Verwendung angegebenen Klassentyps.

wie benutzt man

Config.class


@Congiguration
@ComponentScan
public class Config{
    @Bean
    HogeClass hogeClass(){
        return new HogeClass();
    }

    @Bean
    FugaClass fugaClass(){
        return new FugaClass();
    }
}

Injection.class



public class Injection{
    @Autowired   
    HogeClass hogeClass;

    @Autowired
    FugaClass fugaClass;
}

Problem

Bean des angegebenen Typs existiert nicht ⇒ NoSuchBeanDefinitionException tritt auf

Im Container werden mehrere Beans des angegebenen Typs registriert ⇒ NoUniqueBeanDefinitionException tritt auf

Insbesondere ist es häufig so, dass es mehrere Klassen gibt, die eine bestimmte übergeordnete Klasse erben, und es ist die Bedeutung von DI, die untergeordnete Klasse jedes Mal in den Quellcode zu schreiben, wenn DI ausgeführt wird. Wenn Sie eine Bean in der übergeordneten Klasse ausführen, erhalten Sie eine NoUniqueDefinitionException usw. Die nächste Methode besteht darin, dies zu lösen.

② Lösung mit Namen

Übersicht → Legen Sie beim Definieren einer Bean einen eindeutigen Namen fest und geben Sie diesen Namen beim Abrufen an

wie benutzt man

Config.class


@Congiguration
@ComponentScan
public class Config{
    @Bean
    HogeClass hogeClass(){
        return new HogeClass();
    }

    @Bean
    HogeClass fugaClass(){
        return new FugaClass();
    }
}

Injection.class



public class Injection{
    @Autowired
    @Qualifer("hogeClass")   
    HogeClass hoge;

    @Autowired
    @Qualifer("fugaClass")
    HogeClass fuga;
}

Im obigen Fall handelt es sich bei beiden Klassen um Klassen, deren übergeordnetes Element HogeClass ist. Daher tritt ein Fehler auf, sofern sie nicht von Qualifer namentlich verknüpft werden. Wenn Sie den Namen einzeln angeben möchten, gehen Sie wie folgt vor

Config.class


@Congiguration
@ComponentScan
public class Config{
    @Bean(name = "hoge1")
    HogeClass hogeClass(){
        return new HogeClass();
    }

    @Bean(name = "fuga1")
    HogeClass fugaClass(){
        return new FugaClass();
    }
}

##Vorschau beim nächsten Mal
Ich möchte den Inhalt des Komponentenscans und den Umfang der Bean zusammen beenden.


Recommended Posts

Über den Frühling ③
Über Spring AOP
Über den Frühling AOP
Über DI des Frühlings ①
Über Spring AOP Pointcut
Über DI des Frühlings ②
Über =
[Persönliche Notizen] Über das Spring Framework
Informationen zum Spring Framework-Kontextfehler
Informationen zu Anmerkungen zu Spring DI
Über method.invoke
Über Kotlin
Über Hinemos
Über die Vererbung
Über Docker
Über Schienen 6
Über Aufzählung
Über Polymorphismus
Über Optional
Über Hash
Über JitPack
Über das Binden der Spring AOP Annotation
Darüber ()
Über die Kapselung
Über JAVA_HOME
Über statische
Über Ausnahmen
Frühling Java
Über den Umfang
Über Fehler bei der Implementierung der Federvalidierung
[Maven] Über Maven
Spring Dependency Injection mit Java, Kotlin
Informationen zur ersten Anzeige von Spring Framework
Informationen zur Ausnahmebehandlung
Frühlingsrückblick Memo
Über die Java-Schnittstelle
[Java] Informationen zu Java 12-Funktionen
Federeinspritzung verschieden
Über zyklische Komplexität
Informationen zur Ausnahmebehandlung
Über den offiziellen Startleitfaden für Spring Framework
Informationen zu AsyncTask-Generika
Spring Fox ① Einführung
Über Ruby-Symbole
Informationen zur Array-Multiplikation
[Java] Über Arrays
[Tutorial] Spring Batch
Informationen zur Klassenvererbung.
Über Ruby Hash
Über singuläre Methoden