Spring-applicationContextgetBeansWithAnnotationメソッドは空のリストを返します

不思議の国のアリス

私の質問はgetBeansWithAnnotationメソッドについてです。

MyCustomAnnotationという名前のカスタムアノテーションがあります。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
@Scope("prototype")
public @interface MyCustomAnnotation {

    String group() default "DEFAULT_GROUP";
}

以下のようなリスナークラスもあります。

public class MyCustomAnnotationListener implements ApplicationListener<ContextRefreshedEvent> {

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        ApplicationContext applicationContext = event.getApplicationContext();
        Map<String, Object> myCustomAnnotationBeans = applicationContext.getBeansWithAnnotation(MyCustomAnnotation.class);
    }
}

MyCustomAnnotationを使用してコンポーネントをスキャンするようにapplication-context.xmlを構成しました。

<context:include-filter type="annotation" expression="com.annotations.MyCustomAnnotation"/>

MyCustomAnnotationListenerのgetBeansWithAnnotationメソッドを使用して、アプリケーションの初期起動時にMyCustomAnnotationでアノテーションが付けられたBeanのリストを取得できます。

私の質問は、このメソッドが2回目にトリガーされたときに、なぜ空のリストを返すのかということです。

ありがとう

ケンちゃん

ContextRefreshedEventコンテキストのブートストラップ中に1回発生する必要があります。イベントをコンテキスト自体とそのすべての親コンテキストに公開します。

これで、リスナー(ie MyCustomAnnotationListener)が2回実行され、コンテキストに親コンテキストがある可能性があることが示唆されます。Bean@MyCustomAnnotationは子コンテキストで定義されているため、親コンテキストはそれを見つけることができずMyCustomAnnotationListener、親コンテキストに対して実行すると空のリストが返されます。

を使用して、コンテキストが同じかどうかを確認できますapplicationContext.getId()

ところで:@MyCustomAnnotationもマークされて@Componentいるように、デフォルトでSpringによって取得されますinclude-filterを設定する必要はありません

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Spring CrudRepositoryメソッドfindAll()が空のリストを返す

分類Dev

リストを返すメソッドに配置されたとき、Springの@Cacheableは何をしますか?

分類Dev

Spring Data Neo4j4リポジトリメソッドは1つの要素を返します

分類Dev

Spring Securityは、HttpSecurityを使用してURLとメソッドのリクエストを承認します

分類Dev

Spring MVC PUTリクエストが405メソッドを返しません

分類Dev

Spring-オブジェクトのリストを返すリクエストメソッドがエラーを示しています

分類Dev

Spring BootsessionRegistryはプリンシパルの空のリストを返します

分類Dev

Springの@Async voidを返すメソッドのテスト

分類Dev

リクエストマッピングメソッドがリストを返す場合、Spring Bootはどのようにビュー名を解決しますか?

分類Dev

getContactsFromFirebase()メソッドは空のリストを返します

分類Dev

SpringBoot2 + Spring security CORSOPTIONSメソッドは401コードを返します

分類Dev

Spring Data MongoDBはカスタムリポジトリメソッドのクエリを生成しようとします

分類Dev

テストメソッド内のSpringアプリケーションコンテキストを再読み込みまたは更新しますか?

分類Dev

Spring Boot統合テストのモックメソッドがnullを返す

分類Dev

Spring Data Restは、mongoリポジトリのPOSTメソッドのSwaggerでパス変数としてIDを表示しますか?

分類Dev

Spring MVCは、同じリクエストマッピングでgetメソッドとpostメソッドを混同しています

分類Dev

405-リクエストメソッド 'POST'はSpring MVC + Spring Securityをサポートしていません

分類Dev

Spring @Valueは空の文字列をリストに分割します

分類Dev

SpringでPOSTリクエストを処理するこのRESTメソッドはどの程度正確に機能しますか?

分類Dev

Spring Data JPA:nullではなく空のリストを返す

分類Dev

Spring AOPはアラウンドアドバイスのメソッド引数の値を変更します

分類Dev

リクエストメソッド 'POST'はSpring Securityをサポートしていません

分類Dev

Spring @RequestBody RESTサービスのpostメソッドは、いくつかのエンティティ関係で415を返します

分類Dev

Spring Securityのgetprincipal()メソッドは、クラスUserDetailsの代わりに文字列(ユーザー名)を返します

分類Dev

コントローラメソッドでリクエストパラメータが使用できない場合、SpringはBad Requestをスローします

分類Dev

Spring DataRESTリポジトリメソッドを呼び出してもリンクが返されません

分類Dev

Spring DataRESTリポジトリメソッドを呼び出してもリンクが返されません

分類Dev

Spring MVCコントローラーメソッドは、ビューの代わりにJSONオブジェクト(検証エラーのリストを含む)のようなものを返すことができますか?

分類Dev

Spring RestTemplateGETリクエストは空のクエリパラメータを削除します

Related 関連記事

  1. 1

    Spring CrudRepositoryメソッドfindAll()が空のリストを返す

  2. 2

    リストを返すメソッドに配置されたとき、Springの@Cacheableは何をしますか?

  3. 3

    Spring Data Neo4j4リポジトリメソッドは1つの要素を返します

  4. 4

    Spring Securityは、HttpSecurityを使用してURLとメソッドのリクエストを承認します

  5. 5

    Spring MVC PUTリクエストが405メソッドを返しません

  6. 6

    Spring-オブジェクトのリストを返すリクエストメソッドがエラーを示しています

  7. 7

    Spring BootsessionRegistryはプリンシパルの空のリストを返します

  8. 8

    Springの@Async voidを返すメソッドのテスト

  9. 9

    リクエストマッピングメソッドがリストを返す場合、Spring Bootはどのようにビュー名を解決しますか?

  10. 10

    getContactsFromFirebase()メソッドは空のリストを返します

  11. 11

    SpringBoot2 + Spring security CORSOPTIONSメソッドは401コードを返します

  12. 12

    Spring Data MongoDBはカスタムリポジトリメソッドのクエリを生成しようとします

  13. 13

    テストメソッド内のSpringアプリケーションコンテキストを再読み込みまたは更新しますか?

  14. 14

    Spring Boot統合テストのモックメソッドがnullを返す

  15. 15

    Spring Data Restは、mongoリポジトリのPOSTメソッドのSwaggerでパス変数としてIDを表示しますか?

  16. 16

    Spring MVCは、同じリクエストマッピングでgetメソッドとpostメソッドを混同しています

  17. 17

    405-リクエストメソッド 'POST'はSpring MVC + Spring Securityをサポートしていません

  18. 18

    Spring @Valueは空の文字列をリストに分割します

  19. 19

    SpringでPOSTリクエストを処理するこのRESTメソッドはどの程度正確に機能しますか?

  20. 20

    Spring Data JPA:nullではなく空のリストを返す

  21. 21

    Spring AOPはアラウンドアドバイスのメソッド引数の値を変更します

  22. 22

    リクエストメソッド 'POST'はSpring Securityをサポートしていません

  23. 23

    Spring @RequestBody RESTサービスのpostメソッドは、いくつかのエンティティ関係で415を返します

  24. 24

    Spring Securityのgetprincipal()メソッドは、クラスUserDetailsの代わりに文字列(ユーザー名)を返します

  25. 25

    コントローラメソッドでリクエストパラメータが使用できない場合、SpringはBad Requestをスローします

  26. 26

    Spring DataRESTリポジトリメソッドを呼び出してもリンクが返されません

  27. 27

    Spring DataRESTリポジトリメソッドを呼び出してもリンクが返されません

  28. 28

    Spring MVCコントローラーメソッドは、ビューの代わりにJSONオブジェクト(検証エラーのリストを含む)のようなものを返すことができますか?

  29. 29

    Spring RestTemplateGETリクエストは空のクエリパラメータを削除します

ホットタグ

アーカイブ