私はコメントから例を挙げる:SpringApplication.run(this, args);
の代わりにSpringApplication.run(Application.class, args);
を入力してください。
Springは実際にはSpringを使用していないので、Springが依存性注入をどのように呼び出すのかは正確にはわかりませんが、質問に無関係に回答する必要があります。
まず、このメソッドはmain
から呼び出されます。詳細はpublic static void main
からです。これはstatic
メソッドであり、this
はそのメソッドには存在しません。したがって、代わりにSpringApplication.run(new Application(), args);
にする必要があります。
しかし、Application
のコンストラクタがpublic Application(Something dependency1, AnotherThing dependency2, SomethingElse dependency3)
のように見える場合はどうなりますか?それらの依存オブジェクトのそれぞれを最初に作成しなければならないし、独自の依存関係も持つ必要があります。あなたは、新しいオブジェクトを作成し、より新しいオブジェクトのコンストラクタに渡すという、数十行のこの巨大なシーケンスで終わるでしょう。
SpringApplication.run(Application.class, args);
は、Application
コンストラクタがどのようなものであっても単一の短い行であり、必要なオブジェクトを何十個も見つけ出して作成するように特別に設計されています。それはApplication
のコンストラクタを見て、3つの引数のリストを見て、それらのクラスを見て、それらのコンストラクタを見つけ、それらのコンストラクタの引数リストを見て、すべての短いメソッド呼び出しから。クラスではなく、すでに作成されているApplication
のインスタンスを渡すことを要求すると、このクラスのポイントは無効になり、クラスは実際に必要です。
代わりにインスタンスを使用する必要がなく、実際には目的の機能を破棄するクラスでは、他にもたくさんのことがありますが、これはその一例です。
「someclass」のインスタンスを作成するため、もう一方は作成しないためです。これは、ジェネリックとマッピングを扱うときに非常によく使用されます。 'someclass.class'はインスタンスでもあり、' Class'のインスタンスです。 – luk2302
'新しいsomeclass()'はコンストラクタへの呼び出しです。そのコンストラクタがパブリックであるか、それが存在する(パラメータが必要な場合もある)ことを誰も保証しません。なぜ型が必要なときにクラスのインスタンスを作成するのですか? – Oneiros
@ luk2302はい、明示的には話しますが、クラスタイプを使用してsomeclassをインスタンス化できます。だから私の質問はなぜクラスの型ではなく、クラス、またはクラスのいくつかのインターフェイス表現を渡す立場ですか? .classを渡すことのメリットは何ですか? – user3416682