多数の Bean を使用して依存関係が注入されたアプリの複雑さを管理する

StackOverflow https://stackoverflow.com/questions/986146

質問

私は、数百もの多数の Bean を含む Spring アプリケーションに取り組んでいますが、使用したり文書化したりするのが非常に面倒になってきています。

保守性、ドキュメント化、および一般的な使用法に役立つ、多数の Bean を含む DI 対応アプリに関する経験に興味があります。

このアプリケーションはいくつかのコンテキスト ファイルを備えた Spring ベースですが、DI コンテナーに関する提案や、DI 一般に関する提案についても喜んで耳を傾けます。

役に立ちましたか?

解決

次のものが役立つことがわかりました。

  1. Spring 構成を複数のスタンドアロン構成に分割し、Spring のインポート機能を使用して構成の依存関係をインポートします (「 ここ, 、セクション 3.2.2.1)。そうすることで、必要に応じて組み合わせたり逆アセンブルしたりできる一連の構成が得られ、それらはすべて独立しています (すべての依存関係が明示的に参照されます)。
  2. Spring 対応の IDE を使用すると、Bean をポイントアンドクリックして構成内を移動できます (参照/名前、ソース コード間の移動)。 インテリジ これに関しては非常にうまく機能します (バージョン 7 以降だと思います)。Eclipse も同様のことを行うのではないかと思います。
  3. 改訂 あなたは注射しています どこ. 。複数の Bean インジェクションを 1 つの複合 Bean または「メタ」Bean、またはより大きなコンポーネントにリファクタリングすることが必要な場合があります。あるいは、以前は注入する必要があると考えていたコンポーネントが変更されていなかったり、その注入可能性 (テストや戦略としての実装など) を要求したことがなかったりすることに気づくかもしれません。

私は以前、数百 (数千?) の Bean を含む巨大な Spring インストールを扱っていました。構成を分割することで、管理がはるかに容易になり、スタンドアロン プロセスのテストや作成などが簡素化されました。しかし、Intellij に付属の Intellij Spring 統合が最も大きな違いを生んだと思います。Spring 対応 IDE を使用すると、時間を大幅に節約できます。

他のヒント

あなたはコンポーネント・スキャンを使用することができますそして、の機能をオートワイヤリングすることは劇的に春のXML設定の量を減少させる。

例:


<beans>
  <!-- Scans service package looking for @Service annotated beans -->
  <context:component-scan base-package="my.root.package.service"/>

</beans>

あなたのサービスクラスを自動的にスキャンするために注釈を付けなければなりません。

タグ

package my.root.package.service;

@Service("fooService") public class FooServiceImpl implements FooService{

}

また、豆の依存関係を注入する方法春を伝えるために@Autowiredアノテーションを使用することができます:


package my.root.package.service;

@Service("barService")
public class BarServiceImpl implements BarService{
    //Foo service injected by Spring
    @Autowired
    private FooService fooService;

    //...
}

@Wilsonフレイタスが言うように、

、オートワイヤリングを使用しています。私は毎日ほとんどautowiredを使用して、数千春管理Beanを持つシステムで動作します。しかし、私は、「全体像を保持」の概念が少し見当違いだと思います。システムが大きくなるにつれて、あなたは小さなシステム上でやったのと同じ方法でそれを行うことを期待することはできません。 @Autowiring力を使用すると、あなたは再びあなたが依存関係にナビゲートするためにあなたのIDEの依存性の追跡機能を使用できることを意味するXMLベースの春、より強い型付けを使用する。

私は本当にそれが春の構成になると、の「完全な」絵のあまりを理解する必要があり、それはあなたがをすることを考えるのは次善のだと思います。あなたはあなたのコードに焦点を当てする必要があり、それが依存関係です。 Managebilityと保守性は、十分にこのコードを整理するだけでなく、物事を命名して、カップリングを管理することにより達成されます。あなたが春を使用していない場合にも適用されるもののすべて。春はあまり変化してはならない、とJSR-330の承認を得て、それも依存性の注入は、ランタイム環境の「ボンネットの下に」、さらにクリープますように見えるかもしれません。

私たちの戦略は次のとおりです。

  • 命名規則, 例:fooService、fooDao、fooController;
  • プロパティ セッターは次の規則に従います。
  • 名前による自動配線 (autowire="byName");タイプ別の自動配線、特にコントローラー層で多くの問題がありました。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top