ホームページ >Java >&#&チュートリアル >spring-:setbeanname() - of-beannameawarebeanfactory
この詳細なウォークスルーは、単純なJava Springアプリケーション内の
インターフェイスのBeanNameAware
メソッドを示しています。 実行フローを段階的に調べてみましょう
setBeanName()
プログラムは
メソッドで開始されます。 スプリングのコンテキストは、から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。スプリングコンテキストの初期化
は、
AnnotationConfigApplicationContext
を調整)をスキャンします。
@Configuration
TenantConfig
basePackages
3。 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
@Qualifier
7。 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 サイトの他の関連記事を参照してください。