アプリケーションのすべての階層で特定の Bean の起動シーケンスを管理する必要がある場合。たとえば、アプリケーションの起動時に Bean を初期化する必要があります。
パブリック ライブラリ内の Bean が他の開発者サービスで使用されているが、シナリオによっては Bean をカスタマイズする必要がある場合は、これらのカスタマイズされた Bean の前に Bean をロードする必要があります。公共図書館。
Spring Boot アプリケーションでは、次の 3 つの方法を採用して、独自の Bean の優先読み込みを実現できます。
1. @Configuration アノテーション @DependsOn アノテーション@Configuration アノテーションは Spring Boot アプリケーションで Bean を宣言し、Bean の優先順位を指定できるようにします。次に、@DependsOn アノテーションを使用して、アプリケーションのどの段階でこれらの Bean をロードする必要があるかを Spring コンテナに明示的に指示できます。
使用方法は次のとおりです。
(1) @Configuration アノテーションを宣言し、@DependsOn アノテーションを使用して、参照される Bean がすでに存在することを確認します (他の Bean または構成クラス)。@Configuration @DependsOn("myOrderBean") public class MyOrderedBeanConfig { // 配置类内普通Bean @Bean public MyBean myBean() { return new MyBean(); } }(2) @Configuration アノテーションを Spring Boot アプリケーションに導入して、アプリケーションの起動時に実行できるようにします。
@SpringBootApplication @Import(MyOrderedBeanConfig.class) public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }2. @Component アノテーション @DependsOn アノテーション
@Component アノテーションは Bean を宣言する最も速い方法の 1 つであり、Bean の名前を指定できます。 。アプリケーションの起動時に既存の Bean を最初にロードしたい場合は、@DependsOn アノテーションを使用してこれを実現できます。複数の Bean を指定する場合は、カンマを使用してそれらを区切ることができます。
使用方法は以下のとおりです。 (1)@Componentアノテーションが付けられたクラス内で、@DependsOnアノテーションを使用して明示的に指定します。 Bean オーダーのロード。
@Component("myBean") @DependsOn({"bean1", "bean2"}) public class MyBean { // ... }(2)
@Component アノテーションを Spring Boot アプリケーションに導入し、アプリケーションの起動時に実行します。
@SpringBootApplication @ComponentScan(basePackages = "com.example.demo") public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }3. PriorityOrdered インターフェイスの実装
PriorityOrdered インターフェイスを実装し、読み込み順序を制御できるように getOrder() メソッドを実装します。豆の。最後に、BeanPostProcessor インターフェイスを使用して、これらの Bean が初めて生成されたときに確実にロードされるようにすることができます。
使用方法は次のとおりです。 (1)PriorityOrdered インターフェイスを実装し、getOrder() メソッドを使用して正の値を返します。 Bean クラスの優先順位を指定する整数。値が小さいほど優先度が高くなります。
public class MyBean implements InitializingBean, PriorityOrdered { public void afterPropertiesSet() { // ... } public int getOrder() { return 0; // 这个值将确保此 bean 被最先加载 } }(2) BeanPostProcessor インスタンスを提供し、@Order アノテーションで順序を指定します。このインスタンスは、Spring コンテナのライフサイクル内のすべての通常の Bean よりも前に実行されます。
@Component @Order(value = 1) public class MyBeanPostProcessor implements BeanPostProcessor { // ... }(3) @ComponentScan アノテーションを Spring Boot アプリケーションに導入して、アプリケーションの起動時に実行できるようにします。
@SpringBootApplication @ComponentScan(basePackages = {"com.example.demo"}) public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }
Notes
以上がSpringBoot は Bean をロードするときにどのようにして最初に私を選択しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。