この図は、スプリングアプリケーション内の段階的な実行フローとBeanライフサイクルを示しています。プロセスを分解しましょう:
フェーズ1:アプリケーションコンテキストの初期化アプリケーションは、構成ソースとして
を使用してスプリングを作成することから始まります。 これにより、SpringのBeanの発見と初期化プロセスがトリガーされますAnnotationConfigApplicationContext
フェーズ2:bean定義とスキャンTenantConfig
、が注釈が付けられ、2つの豆を定義します:
および、両方のインスタンスの両方です。 TenantConfig
注釈は、springにコンポーネントをスキャンするように指示し、@Configuration
の発見と登録(tenantA-dataSource
アノテーションのため)。
tenantB-dataSource
TenantDataSource
フェーズ3:Beanの作成と依存関係噴射@ComponentScan
org.example4
TenantService
春は@Service
豆をインスタンス化します。 重要なことに、
を実装します。このインターフェイスのメソッドはSpringによって呼び出され、各インスタンスがテナント名(「Tenanta」または「TenantB」など)を動的に決定し、それに応じてデータベースURLを構成できるようにします。
次に、春は豆を作成します。 コンストラクターでのTenantDataSource
注釈は、TenantDataSource
アノテーションと組み合わされて、正しいBeanNameAware
インスタンスが依存関係として注入されることを保証します。これは、コンストラクターベースの依存関係噴射です
setBeanName()
TenantDataSource
フェーズ4:Beanの検索と方法
メソッドは、TenantService
を使用してアプリケーションコンテキストから完全に構成された@Autowired
beanを取得します。最後に、@Qualifier
が呼び出されます。この方法では、注入されたTenantDataSource
豆を使用してそれぞれのデータベースに接続し( "tenanta_db" and "tenantb_db")、依存関係の噴射と豆のライフサイクル管理の成功を示しています。
重要な概念が強調表示されています:
TenantDataSource
インスタンス)を自動的に注入します。
TenantService
BeanNameAware
@autowired and @qualifier:以上がspring-:論理排出式のオーダーとコードフローの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。