私はこの公式Spring tutorials のサンプルを試していますが、このコードには依存関係があります:
https://github.com/spring-guides/gs-async-method/tree/master/complete
AppRunner.Javaクラスのコードを見ると、2つの問題があります。
1)サーバーの起動時に、このクラスのコンストラクターにブレークポイントを配置すると、コンストラクターのように、GitHubLookupServiceは@ Service構成されたBean。しかし、コンストラクタに@Autowired
注釈がなかったので、このコンストラクタはどのようにして正しい依存関係で呼び出されますか? null
であるはずでした。
Spring Bootの自動仮定ですか?
Springは「プライベートフィールド+コンストラクター引数」を認識し、適切なBeanを探す必要があると想定していますか?
それはSpring FrameworkまたはSpring boot?
何か不足していますか?
2)私が覚えているように、デフォルトコンストラクタをBean /サービスなどに提供することが必須でした。なぜこのクラス(AppRunner)にはデフォルトコンストラクタがないのですか? Springは、引数を指定してコンストラクターを実行する必要があることをどのように認識しますか?それは唯一のコンストラクターだからでしょうか?
Spring4.3以降、Spring Beanとして設定されているクラスにコンストラクタが1つしかない場合、Autowired
アノテーションは省略できます。 Springはそのコンストラクターを使用し、必要な依存関係をすべて注入します。
defaultコンストラクターについて:デフォルトのコンストラクター、複数のコンストラクターがある場合はAutowired
注釈付きのコンストラクター、または1つのコンストラクターのみが必要です。クラスでAutowired
アノテーションの有無にかかわらず。
詳細については、Springの公式ドキュメントの "@ Autowired" の章を参照してください。