1. ホーム
  2. spring

[解決済み] Springは@Autowiredアノテーションを付けずにコンストラクタに依存性を注入する

2023-02-07 19:08:54

質問

私はこの公式のSpringの例を使って実験しています。 チュートリアル の例を試していて、このコードに依存しているところがあります。

https://github.com/spring-guides/gs-async-method/tree/master/complete

のコードを見てみると AppRunner.java クラスのコードを見ると、2つの疑問があります。

  1. サーバ起動時に、このクラスのコンストラクタにブレークポイントを置くと、コンストラクタ内で GitHubLookupService が spring から提供されているようで、それを使って @Service ビーンが設定されていました。しかし、そこには @Autowired アノテーションがなかったので、一体どうやってこのコンストラクタが正しい依存関係で呼び出されるのでしょうか? 本来は null .

の自動的な前提なのでしょうか? Spring Boot ?

Springは、"privateフィールド+コンストラクタ引数を見て、適切なBeanを探すべきと仮定しているのでしょうか?

それは Springフレームワーク それとも スプリングブート ?

何か見落としているのでしょうか?

  1. 私の記憶では、以下のものを提供することが推奨されていました。 デフォルトコンストラクタ をビーンやサービスなどに提供することが必須でした。どうしてこのクラス ( AppRunner ) にはデフォルトのコンストラクタがないのでしょうか? Spring はどのようにして引数付きのコンストラクタを実行すべきかを知っているのでしょうか? それはそれが唯一のコンストラクタだからですか?

どのように解決するのですか?

Springで始める 4.3 のように、Spring Beanとして構成されたクラスが1つのコンストラクタのみを持つ場合、そのクラスは @Autowired アノテーションを省略することができ、Springはそのコンストラクタを使用し、必要な依存関係をすべて注入します。

については デフォルトコンストラクタ : デフォルトのコンストラクタ、あるいは @Autowired アノテーションを持つコンストラクタか、あるいは @Autowired アノテーションの有無にかかわらず

を読む @Autowired の章を読んでください。