ホームページ >Java >&#&チュートリアル >spring-:setbeanname() - of-beannameawarebeanfactory

spring-:setbeanname() - of-beannameawarebeanfactory

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-28 22:13:09657ブラウズ

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

この詳細なウォークスルーは、単純なJava Springアプリケーション内の

インターフェイスのBeanNameAwareメソッドを示しています。 実行フローを段階的に調べてみましょう setBeanName()

1。プログラムの実行が開始されます(main())

プログラムは

メソッドで開始されます。 スプリングのコンテキストは、

からmain()の読み込みを使用して初期化されます。 次に、AnnotationConfigApplicationContext豆が取得されます。TenantConfig.class TenantService

<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>
2。スプリングコンテキストの初期化

は、classを処理します。 春に管理された豆(@serviceなど)の指定されたパッケージ(必要に応じてAnnotationConfigApplicationContextを調整)をスキャンします。 @Configuration TenantConfigbasePackages3。 Bean Creation(TenantConfig)メソッド(
<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>
および

)を呼び出して、2つの豆を作成します。

4。 TenantDataSource初期化@Bean実装tenantADataSource()。 Beanの初期化中、スプリングコールtenantBDataSource()。 この方法は、Bean Nameからテナント名(「Tenanta」または「TenantB」)を抽出し、それに応じてデータベースURLを設定します。 TenantDataSource

5。 TenantService Bean Creation

springは

(@service)を見つけます。 コンストラクターはTenantDataSourceを使用して、どのBeanNameAware豆を注入するかを指定します。 setBeanName(String beanName)

<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>
6。 Tenantserviceの取得 inはコンテキストから取得されます()。 依存関係で完全に初期化されています。

TenantService@Qualifier7。 ProcesstenantData()TenantDataSource

は呼び出されます。
<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>

8。データベース接続

main()およびTenantServiceが呼び出され、接続の詳細を印刷します。context.getBean(TenantService.class)

9。プログラム終了

テナントデータを処理した後、プログラムは終了します。

tenantService.processTenantData()

完全なコンソール出力:

の詳細については、Spring Frameworkドキュメントを参照してください。 この例では、がスプリングコンテナ内の割り当てられた名前を豆に認識できるようにし、これらの名前に基づいて動的な構成を有効にする方法を示しています。

以上がspring-:setbeanname() - of-beannameawarebeanfactoryの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。