[JAVA] À propos du printemps ③

Objectif de cet article

Ceci est une continuation de About Spring②. Cette fois, je résumerai brièvement l'association des haricots.

Qu'est-ce que l'association Bean?

Quel objet se comporte comme un bean dans le chapitre précédent et l'avant-dernier chapitre? J'ai résumé la spécification et le comportement du conteneur DI qui le stocke. Dans la méthode d'injection de bean de base, la méthode getBean a été appelée avec la classe de bean en tant qu'argument de la classe ContextConfiguration, mais comment le bean est-il spécifié dans le câblage automatique à l'aide de @Autowired? C'est ça?

① Solution par type

Vue d'ensemble → Déterminez par le type de classe spécifié lors de l'utilisation.

comment utiliser

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;
}

problème

Le bean du type spécifié n'existe pas ⇒ NoSuchBeanDefinitionException se produit

Plusieurs beans du type spécifié sont enregistrés dans le conteneur ⇒ NoUniqueBeanDefinitionException se produit

En particulier, il arrive souvent qu'il y ait plusieurs classes qui héritent d'une certaine classe parent, et c'est le sens de DI d'écrire la classe enfant dans le code source lors de la DI à chaque fois. Si vous faites un bean dans la classe parent, vous obtiendrez une NoUniqueDefinitionException, et ainsi de suite. La méthode suivante consiste à résoudre ce problème.

② Solution par nom

Vue d'ensemble → Définissez un nom unique lors de la définition d'un bean et spécifiez ce nom lors de la récupération

comment utiliser

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;
}

Dans le cas ci-dessus, les deux sont des classes qui ont HogeClass comme parent, donc une erreur se produira à moins qu'elles ne soient liées par leur nom par Qualifer. Si vous souhaitez spécifier le nom individuellement, procédez comme suit

Config.class


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

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

##Aperçu de la prochaine fois
Je veux terminer le contenu de l'analyse des composants et la portée du bean ensemble.


Recommended Posts

À propos du printemps ③
À propos de Spring AOP
À propos de Spring AOP
À propos de DI of Spring ①
A propos de Spring AOP Pointcut
À propos de DI of Spring ②
À propos =
[Notes personnelles] À propos du framework Spring
À propos de l'erreur de contexte Spring Framework
À propos des annotations liées à Spring DI
À propos de method.invoke
À propos de Kotlin
À propos de Hinemos
À propos de l'héritage
À propos de Docker
À propos des rails 6
À propos d'énumération
À propos du polymorphisme
À propos facultatif
À propos du hachage
À propos de JitPack
A propos de la liaison de l'annotation Spring AOP
À propos de ça ()
À propos de l'encapsulation
À propos de JAVA_HOME
À propos de statique
À propos des exceptions
Spring Java
À propos de la portée
À propos des erreurs lors de la mise en œuvre de la validation du printemps
[Maven] À propos de Maven
Injection de dépendances Spring à l'aide de Java, Kotlin
À propos de l'affichage initial de Spring Framework
À propos de la gestion des exceptions
Mémo rétrospective du printemps
À propos de l'interface Java
[Java] À propos des fonctionnalités de Java 12
Injection de ressort divers
À propos de la complexité cyclique
À propos de la gestion des exceptions
À propos du guide de démarrage officiel de Spring Framework
À propos des génériques AsyncTask
Spring Fox ① Introduction
À propos des symboles Ruby
À propos de la multiplication des tableaux
[Java] À propos des tableaux
[Tutoriel] Spring Batch
À propos de l'héritage de classe.
À propos de Ruby Hash
À propos des méthodes singulières