@Provides メソッドは、常に @Inject コンストラクターと引数なしのコンストラクター (フィールド インジェクションを使用) よりも優先されます。
@Provides メソッドは型の作成の責任を引き継いでおり、これにはスコープが含まれているため、これは重要です。そのため、@Provides メソッドがスコープ化されていない限り、@Provides メソッドで手動で構築された @Singleton とマークされたクラスはスコープ化されません。 .
テストのコンテキストで「オーバーライド」という言葉を使用していることに注意してください...この場合、 @Module(override=true) 設定を使用する必要はありません(害はありませんが)。これは単なる優先順位であり、(実際には) 次のように解決されます。
- @Module(overrides=true) @Provides メソッド
- @Module(overrides=false) (デフォルト) @Provides メソッド
- @Inject コンストラクターの Just In Time バインディング
- 引数のないコンストラクターの Just In Time バインディング、IF クラスには @Inject フィールドがあります。