2012-02-13 4 views
2

@Autowired Beanの大部分をスーパークラスに入れることには欠点がありますが、そのクラスでは使用されずスーパークラスを拡張するサブクラスで使用されますクラス?多くのサブクラスによって拡張されたスーパークラスのSpring Beanをオートワイヤリングする

+0

*あなたは何が欠点と考えていますか?あなたは欠点を見ますか? –

+0

欠点=余分なメモリの使用、スピードの低下など。現在、実行中のマイナス面はありません。他の誰かが何かに遭遇したのかどうか不思議です。 – woolyninja

+0

私は機能的な欠点はないと言いますが、xメンバーが子クラスにアクセスできるようにxメンバーを保持するクラスが気に入らない場合もあります。 –

答えて

5

いいえ、欠点はありません。

すぐにautowiredコンストラクタを使用しないように注意してください。

3

コードが醜いように見えます。春の起動には数ミリ秒かかるかもしれません。もちろん、このフィールドにはメモリ(Javaがフィールドに必要なメモリ)が必要です。しかし、これの横に私は何の問題も期待しません。

そして「ノーマル」のランタイムのために(メモリを除く)は影響

があってはならない私はのは、10〜30のフィールドは最大10個の豆を言うことができます言うことができますと思います。フィールドのトーンがある場合は、テストを行い、メモリとパフォーマンスの影響を測定します。

0

いつも通り、それは依存します。あなたのすべての豆がシングルトンスコープであれば、それは大きな問題ではないはずです。これは「公式のパーティライン」です。

Beanがリクエストスコープ(コントローラクラスなど)の場合、ご存知のよりもはるかに大きな問題があるかもしれません。多分これらの依存関係の一部はシングルトンではないでしょうか?依存関係とその依存関係などを構築しているので、リクエストスコープのコントローラクラスのインスタンス化ごとに簡単に500個のBeanを構築できます。

豆のインスタンス化は春の氷河のように遅いので、問題があります。 @Bozhoがこの返答のコメントを激しく守ると確信しているので、春の枠組みの公式のパーティラインはこの問題を無視するように思われる。これは明らかに、 "Webスコープ"が春2.0の既存のデザインにレトロマウントされており、サポートされている大量のユースケースのために、これは既存の実装の前提に完全に行われました。

解決策はもちろん、あなたの有線依存関係を正規化することです。それらをすべて基底クラスに入れないでください。あなたが怠けている場合は、ApplicationContextでワイヤリングし、必要なときに各サービスのgetBeanへの明示的な呼び出しを使用できます。もちろん、これは春の設計ガイドラインに全く反するものです。

関連する問題