6

私は、数百の数の Bean を持つ Spring アプリケーションに取り組んでおり、使用と文書化が非常に面倒になっています。

保守性、ドキュメンテーション、および一般的な使用法に役立つ多数の Bean を使用した DI 対応アプリの経験に興味があります。

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

4

4 に答える 4

6

コンポーネント スキャンと自動配線機能を使用して、Spring 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 アノテーションを使用して、Spring に Bean 依存関係を注入する方法を伝えることもできます。


package my.root.package.service;

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

    //...
}

于 2009-06-13T14:55:20.603 に答える
4

私は以下が有用であることがわかりました:

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

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

于 2009-06-12T11:29:20.453 に答える
3

@Wilson Freitasが言うように、自動配線を使用してください。私は毎日、ほとんど自動配線を使用して、数千のスプリングマネージド Bean を持つシステムで作業しています。しかし、「全体像を維持する」という概念は少し間違っていると思います。システムが成長するにつれて、小規模なシステムで行ったのと同じ方法でそれを行うことは期待できません。@Autowiring を使用すると、xml ベースのスプリングよりも強力な型付けを使用する必要があります。これは、IDE の依存関係追跡機能を使用して依存関係をナビゲートできることを意味します。

スプリング構成に関しては、「全体像」を理解しすぎる必要があると考えるのは最適ではないと本当に思います。コードとその依存関係に集中する必要があります。管理性と保守性は、このコードを適切に整理し、適切に名前を付け、結合を管理することによって実現されます。春を使用していない場合でも適用されるすべてのもの。Spring はあまり変更されるべきではなく、JSR-330 の承認により、依存性注入がランタイム環境の「フードの下」にさらに忍び寄るように見えるかもしれません。

于 2009-06-14T05:44:50.530 に答える
1

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

  • 命名規則。例: fooService、fooDao、fooController;
  • これらの規則に従うプロパティ セッター。
  • 名前による自動配線 (autowire="byName"); 特にコントローラーレイヤーで、タイプごとの自動配線に多くの問題がありました
于 2009-08-05T09:48:44.610 に答える