Maison > Java > javaDidacticiel > printemps: SetbeanName () - Of-Beannameaware Beanfactory

printemps: SetbeanName () - Of-Beannameaware Beanfactory

Patricia Arquette
Libérer: 2025-01-28 22:13:09
original
657 Les gens l'ont consulté

spring-: setBeanName()-of-BeanNameAware-BeanFactory

Cette procédure détaillée illustre la méthode BeanNameAware de l'interface setBeanName() dans une simple application Java Spring. Explorons le flux d'exécution étape par étape.

1. L'exécution du programme commence (main ())

Le programme commence dans la méthode main(). Un contexte de ressort est initialisé à l'aide de AnnotationConfigApplicationContext, chargeant la configuration de TenantConfig.class. Le TenantService le haricot est ensuite récupéré.

<code class="language-java">public static void main(String[] args) {
    AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(TenantConfig.class);
    TenantService tenantService = context.getBean(TenantService.class);
    tenantService.processTenantData();
}</code>
Copier après la connexion

2. Initialisation du contexte de printemps

AnnotationConfigApplicationContext traite la classe @Configuration -annoée TenantConfig. Il scanne le package spécifié (ajuster basePackages au besoin) pour les haricots à ressort (@Service, etc.).

<code class="language-java">@Configuration
@ComponentScan(basePackages = "org.example4")
public class TenantConfig {
    @Bean(name = "tenantA-dataSource")
    public TenantDataSource tenantADataSource() { return new TenantDataSource(); }

    @Bean(name = "tenantB-dataSource")
    public TenantDataSource tenantBDataSource() { return new TenantDataSource(); }
}</code>
Copier après la connexion

3. Création de haricots (TenantConfig)

Spring appelle les méthodes @Bean (tenantADataSource() et tenantBDataSource()) pour créer deux TenantDataSource haricots: "Tenanta-Datasource" et "TenantB-Datasource".

4. TenantDataSource Initialisation

TenantDataSource implémente BeanNameAware. Pendant l'initialisation des haricots, le printemps appelle setBeanName(String beanName). Cette méthode extrait le nom du locataire ("Tenanta" ou "TenantB") du nom de bean et définit l'URL de la base de données en conséquence.

<code class="language-java">public class TenantDataSource implements BeanNameAware {
    private String tenantName;
    private String databaseUrl;

    @Override
    public void setBeanName(String beanName) {
        this.tenantName = beanName.split("-")[0];
        this.databaseUrl = "jdbc:mysql://localhost:3306/" + tenantName + "_db";
    }

    public void connect() {
        System.out.println("Connecting to database for tenant: " + tenantName);
        System.out.println("Database URL: " + databaseUrl);
    }
}</code>
Copier après la connexion

5. Création de haricots de service de location

Spring trouve TenantService (@Service). Le constructeur utilise @Qualifier pour spécifier les haricots TenantDataSource pour injecter.

<code class="language-java">@Service
public class TenantService {
    private final TenantDataSource tenantADataSource;
    private final TenantDataSource tenantBDataSource;

    @Autowired
    public TenantService(@Qualifier("tenantA-dataSource") TenantDataSource tenantA,
                         @Qualifier("tenantB-dataSource") TenantDataSource tenantB) {
        this.tenantADataSource = tenantA;
        this.tenantBDataSource = tenantB;
    }

    public void processTenantData() {
        System.out.println("Processing data for all tenants...");
        tenantADataSource.connect();
        tenantBDataSource.connect();
    }
}</code>
Copier après la connexion

6. Récupération de TenantService

dans main(), TenantService est récupéré du contexte (context.getBean(TenantService.class)). Il est entièrement initialisé avec ses dépendances.

7. Appel ProcesstenantData ()

tenantService.processTenantData() est appelé.

8. Connexion de la base de données

tenantADataSource.connect() et tenantBDataSource.connect() sont appelés les détails de la connexion d'impression.

9. Terminaison du programme

Le programme se termine après le traitement des données des locataires.

Sortie de console complète:

<code>Processing data for all tenants...
Connecting to database for tenant: tenantA
Database URL: jdbc:mysql://localhost:3306/tenantA_db
Connecting to database for tenant: tenantB
Database URL: jdbc:mysql://localhost:3306/tenantB_db</code>
Copier après la connexion

Pour plus de détails sur BeanFactory, reportez-vous à la documentation de Spring Framework. Cet exemple montre comment BeanNameAware permet aux Beans d'être conscients de leurs noms attribués dans le conteneur de ressort, permettant une configuration dynamique basée sur ces noms.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal