31

私は現在、Spring フレームワークを使用した Java EE 開発に取り掛かろうとしています。私は Spring を初めて使用するので、適切に実行されているプロジェクトがどのように開始されるべきかをイメージするのは困難です。

スターター向けのベスト プラクティス、ヒント、または主な禁止事項はありますか? Spring をどのように始めたのですか? 大きなプロジェクトですか、それとも小さなチュートリアルのようなアプリケーションですか? どのテクノロジーをすぐに使用しましたか: AOP、複雑な Hibernate...

4

11 に答える 11

27

ちょっとしたヒント-アプリケーションの懸念に基づいて、Springxmlコンテキストファイルをモジュール化して明確にラベル付けすると便利だと思いました。これが私が取り組んだWebアプリの例です。

  • MyProject / src / main / resources / spring /
    • datasource.xml- 私の単一のデータソースBean。
    • persistence.xml- 私のDAO/リポジトリ。datasource.xmlBeanに依存し
    • services.xml- サービスレイヤーの実装。これらは通常、AOPを使用してトランザクション性を適用するBeanです。persistence.xmlBeanに依存し
    • controllers.xml- 私のSpringMVCコントローラー。services.xmlBeanに依存し
    • views.xml-私のビューの実装。

このリストは完全でも網羅的でもありませんが、それが要点を示していることを願っています。最適な命名戦略と粒度を選択してください。

私の(限られた)経験では、このアプローチが次の利点をもたらすのを見てきました。

より明確なアーキテクチャ

明確に名前が付けられたコンテキストファイルは、プロジェクト構造に慣れていない人に、Bean定義の検索を開始するための合理的な場所を提供します。循環/不要な依存関係の検出を少し簡単にすることができます。

ドメイン設計を支援します

Bean定義を追加したいが、それがどのコンテキストファイルにもうまく適合しない場合は、新しい概念や懸念が浮上している可能性がありますか?例:

  • サービスレイヤーをAOPでトランザクション化するとします。それらのBean定義をに追加しますservices.xmlか、それとも独自に配置しtransactionPolicy.xmlますか?チームと話し合ってください。トランザクションポリシーはプラグ可能である必要がありますか?
  • Acegi / Spring Security Beanをファイルに追加しますか、それともコンテキストファイルcontrollers.xmlを作成しますか?security.xml展開/環境ごとに異なるセキュリティ要件がありますか?

統合テスト

統合テスト用にアプリケーションのサブセットを接続できます(例:上記のファイルを指定して、作成する必要があるデータベースdatasource.xmlpersistence.xmlBeanのみをテストします)。

具体的には、統合テストクラスに次のように注釈を付けることができます。

@ContextConfiguration(locations = { "/spring/datasource.xml" , "/spring/persistence.xml" })

SpringIDEのBeansグラフでうまく機能します

焦点を絞った名前の付いたコンテキストファイルがたくさんあると、SpringIDEのBeansGraphを使用してアプリのレイヤーを視覚化するカスタムBeansConfigSetを簡単に作成できます。以前、これを使用して、新しいチームメンバーにアプリケーションの組織の概要を説明しました。

于 2008-08-16T21:12:19.233 に答える
14

まず、Spring の心臓部である依存性注入に注目してください。DI を使用できるすべての方法を確認したら、AOP、Remoting、JDBC テンプレートなどのより興味深い部分について考え始めます。したがって、私の最善のアドバイスは、Spring の使用をコアから成長させることです。

ベストプラクティス?標準の XML 構成を使用している場合は、個々のファイルのサイズを管理し、慎重にコメントしてください。あなたや他の人は自分の Bean 定義を完全に理解していると思うかもしれませんが、実際には、単純な古い Java コードよりも元に戻るのはやや困難です。

幸運を!

于 2008-08-12T07:43:24.153 に答える
4

まず第一に、Spring はモジュール性に関するものであり、1 つのことをうまく実行する小さなコンポーネントの作成に集中する場合に最適に機能します。

一般的に次のようなベスト プラクティスに従う場合:

  • 抽象クラスではなくインターフェースを定義する
  • 型を不変にする
  • 1 つのクラスの依存関係をできるだけ少なくします。
  • 各クラスは 1 つのことを行い、それをうまく行う必要があります。大きなモノリシックなクラスは最悪です。テストするのも使うのも難しいです。

コンポーネントが小さく、上記のドグマに従っている場合、それらは簡単に接続して他のものと遊ぶことができるはずです。上記の点は、Spring フレームワーク自体にも当然当てはまります。

PS

上記の点に耳を傾けないでください。彼らは何をするかについて話しているのです。やり方よりも考え方を学ぶほうが大事。人間は考えることができます。何かを繰り返すことは賢いことではなく、考えることが賢いことです。

于 2010-05-08T03:22:51.873 に答える
3

私は実際、Spring がとても好きでした..平均的な J2EE Java Beans に新鮮な風が吹いていました..

Spring が提供する例を実装することをお勧めします。

http://static.springframework.org/docs/Spring-MVC-step-by-step/

また、Spring アプリケーションに Hibernate を追加することに決めました ;)、Spring は Hibernate に優れたサポートを提供するため... :)

ただし、私は難しい方法で学んだDON'Tを持っています(製品の製品)... Controllerインターフェースのみを実装し、インターフェースで提供されるいくつかのデータを含むModelAndViewオブジェクトを返す場合、Springはそれらをガベージ収集しますこれらのデータをキャッシュしようとするためのリソース。そのため、ページが表示されるとすぐにサーバーが空中にある限り、サーバーのメモリを大量に消費するため、これらの ModelAndView オブジェクトに大きなデータを配置するように注意してください...

于 2008-08-12T07:54:25.023 に答える
3

ここから始めてください - 実際、私が読んだ中で最高のソフトウェア開発本の 1 つだと思います。
Expert Spring MVC と Web Flow

MVC クラスの新しい Annotation ベースの構成について学習します。これは Spring 2.5 の一部です。Annotation ベースのクラスを使用すると、単体テストの記述が非常に簡単になります。また、XML の量を削減できることも良いことです。

そうそう、単体テスト - Spring を使用している場合は、単体テストを行ったほうがよいでしょう。:) すべての Web およびサービス層クラスの単体テストを記述します。

ドメイン駆動設計を読んでください。Spring アプリケーションのすべてのレベルでドメイン オブジェクト クラスを使用できるという事実は、非常に強力なドメイン モデルを使用できることを意味します。それを活用してください。

ただし、フォームの作成に Domain Object クラスを使用する場合は、Spring Framework に関する最近のセキュリティ上の懸念に注意する必要があります。サーバー側での議論により、コメントの穴を塞ぐ方法が明らかになりました。

于 2008-08-12T21:11:13.243 に答える
2

始める良い方法は、「Springframework」に集中することです。Spring ポートフォリオは、エンタープライズ ソフトウェアのさまざまな側面に関するプロジェクトの大きな山に成長しました。最初はコアに固執し、概念を把握するようにしてください。コアに慣れたら、最新のバイナリをダウンロードし、Spring の petclinic の例を確認してください。SpringSource が提供しなければならないさまざまなプロジェクトの概要がよくわかります。

ドキュメントは非常に優れていますが、コアの概念を理解してから本をお勧めします。ドキュメントの問題点は、詳細がなく、必要なすべての詳細を提供できないことです。

于 2008-08-12T09:31:41.737 に答える
2

Spring を使用してから何年も経ちますが、Spring のファンとは言えませんが、App Fuse ツール ( https://java.net/projects/appfuse/ ) が人々の助けになっていることは知っています。必要なすべてのアーティファクトを生成するという点でブートストラップします。

于 2008-08-12T07:40:19.293 に答える
2

「...どのテクノロジをすぐに使用しましたか: AOP、複雑な Hibernate...」 - より適切な質問は、人々がすぐに使用しなかったものを尋ねることです。あなたが引用した例をそのリストに追加します。

Spring MVC および JDBC テンプレートは、私の最初の推奨事項です。それらだけで非常に長い道のりを歩むことができます。

私の推奨事項は、Spring アーキテクチャの推奨事項に忠実に従うことです。彼らのレイヤリングのアイデアを使用してください。Web レイヤーが他のレイヤーから完全に分離可能であることを確認してください。これを行うには、Web 層がサービス層のみを介してバックエンドと対話できるようにします。

そのサービス レイヤーを再利用する場合は、Spring の「コントラクト ファースト」Web サービスを使用して公開することをお勧めします。やり取りする XML メッセージから始めると、クライアントとサーバーを完全に切り離すことができます。

Spring を最もよくサポートする IDE は IntelliJ です。数ドルを費やす価値があります。

于 2009-08-23T11:15:09.867 に答える
1

Spring は単体テストにも非常に重点を置いているため、クラスのテスト容易性も重要です。これは基本的に、モジュール化、関心の分離、インターフェイスを介したクラスの参照などについて考えるということです。

于 2008-08-12T10:00:45.017 に答える
1

少し手を出して気に入るかどうかを確認するだけの場合は、Spring の JDBC および/または Hibernate サポートを使用して、DAO レイヤーから始めることをお勧めします。これにより、コアとなる概念の多くを知ることができますが、アプリの残りの部分から簡単に切り離すことができます。これは私がたどったルートであり、Spring で完全なアプリケーションを構築する前の良いウォームアップでした。

于 2008-08-12T15:28:59.940 に答える
1

Spring 2.5 および 3.0 のリリースにより、今利用すべき最も重要なベスト プラクティスの 1 つは Spring アノテーションだと思います。コントローラー、サービス、およびリポジトリーのアノテーションにより、時間を大幅に節約でき、アプリのビジネス ロジックに集中できるようになり、すべてのオブジェクトをプレーン オールド Java オブジェクト (POJO) にすることができる可能性があります。

于 2010-05-08T03:13:43.157 に答える