web-dev-qa-db-ja.com

@Constructorアノテーションが付けられたSpring構成クラスにデフォルトのコンストラクターが必要なのはなぜですか?

私はSpringCore認定を取得するために勉強しています。提供された学習内容について、この質問がありますが、答えることができません。

@Configurationアノテーション付きクラスにデフォルトのコンストラクターが必要なのはなぜですか?

@ Configurationアノテーションが付けられた構成クラスにコンストラクターを宣言しません。デフォルトのコンストラクターは、スーパークラスによって継承されたコンストラクターですか?または何?デフォルトのコンストラクターが必要で、オーバーライドできないのはなぜですか?

Tnx

13
Java Surfer

official spring javadoc によると、spring @ Configurationアノテーション付きクラスにはデフォルトの引数なしコンストラクターが必要です。

@Configurationクラスには、デフォルト/引数なしのコンストラクターが必要であり、@ Autowiredコンストラクターパラメーターを使用することはできません。ネストされた構成クラスは静的である必要があります

その理由は、Springが CGLIBからプロキシ@Configuration クラスを使用し、Springに制限があるためです バージョン4より前のCGLIBでプロキシされたクラスにはデフォルトの引数なしコンストラクターが必要です =。

Spring 4より前は、CGLIBベースのプロキシクラスにはデフォルトのコンストラクターが必要です。そして、これはCGLIBライブラリの制限ではなく、Spring自体の制限です。幸い、Spring 4以降、これは問題ではなくなりました。 CGLIBベースのプロキシクラスは、デフォルトのコンストラクタを必要としなくなりました。

23
Vojtech Ruzicka