春-構成上の混乱?


9

Springをどこかで読んだところ、設定よりも便利です。しかし、Springの人々は、構成に対して非常に多くの変更を取り入れているため、XML構成または注釈を使用することに本当に混乱しています。

XMLと注釈の使用について、誰でも確実な方法論または経験則を提案してほしい。


SOの例は、私のような多くの初心者が構成について混乱していることを示しています。

  • リンク-1

    私は、機能の背後を把握していないようだ<context:annotation-config><context:component-scan>

    私が読んだものから、それらは異なる注釈(@ Required、@ Autowiredなどと@ Component、@ Repository、@ Serviceなど)を処理しているようですが、私が読んだものからは、同じBeanポストプロセッサクラスを登録しています。

    さらに私を混乱させるために、annotation-config属性があります<context:component-scan>...

  • リンク2

    私はまだコンポーネントスキャンタグを持っています:

    <context:component-scan base-package="com.mycompany.maventestwebapp" />

    しかし、私は別のタグ(同様のタスクを持っているように見える)も持っています。これは次のタグです。

    <annotation-driven />

    これら2つのタグの違いは何ですか?他の「奇妙な」ことは、前の例(注釈駆動型タグを使用しない)は、Spring MVCテンプレートプロジェクトを使用してSTSによって作成されたプロジェクトと非常に似ているが、注釈駆動型タグを構成から削除した場合です。ファイルは、プロジェクトが実行され、私に次のエラー与えることはありません:HTTPステータス404を- ...

Spring 3.2はプロキシ用にcglibを必要としなくなりましたが、下位バージョンはcglibを使用します。SpringSourceブログからの引用

そのようなプロキシを生成するために、Springはcglibと呼ばれるサードパーティのライブラリを使用します。残念ながら、このプロジェクトは現在アクティブではありません。Spring 3.2では、SpringがデフォルトでJavassistを使用する可能性が非常に高いです。

これらは、Springが構成上の混乱であることを示唆するのに十分ですか?


1
「春の人々は設定に対して多くの変更をもたらしています」 -例を挙げていただけますか?それは読者があなたの問題をよりよく理解し、あなたの質問に答えるのに役立つでしょう
gnat

9
質問は良くありませんが、タイトルは確かに面白いです。
Florian Margaine 2013

1
@gnatは自分に春を教える過程で、ググったところ、さまざまな方法で表現された同じものに出くわしました。春のドキュメントは、ある方法を実行していること、いくつかのチュートリアルはさらに別の方法を説明していること、両方が正しいこと、学習曲線が非常に高いことです。春に ?

1
@tito「ドキュメントはありますか」というコメントでの質問は、リソースリクエストのように聞こえます。プログラマーはリソースの要求を歓迎しません。私が理解している限り、代わりに根本的な問題を提示したいと思います(私が見る限り、「使用するのに混乱している」という質問のテキストでそれを行いました)-要求された特定のリソースで解決することを目的とした問題
gnat 2013

2
@titoあなたの問題は古いチュートリアルと新しいドキュメントを混ぜ合わせることだと思います。Springは非常に「構成上の慣習」になり、以前ほど表現する必要がなくなりました。ただし、古いチュートリアル(特に3.1より前)では、多くのことが不要になりました。
Matsemann 2013

回答:


5

Springは、「構成よりも規約」があるフレームワークを提供することを目的としています。ただし、実際には、Springアプリケーションにはある程度の構成が必要です。

Spring 2.5.x以前のバージョンでは、一般的なイディオムはこの構成をXML経由で提供することでした。Spring 3.0以降の慣用的な方法は、アノテーション(Java EE6 / 7でも推奨されるもの)を使用することです。

余談ですが、注釈が付けられたJPAエンティティを見るのはおかしいかもしれません(追加?)。4つ以上の注釈を1つのフィールドに追加するのはかなり簡単です。


必要な構成のレベルは、プロジェクトを実行するためにN個のフレームワークを操作しなければならない、私のような短い時間の開発者にとって、理解をはるかに超えています。

1
私は10のアノテーションを持つメソッドを持っています。それぞれが異なる便利なことをします…
ドナルフェロー

1
一方、クラスに@Entityアノテーションを1つだけ持つJPAエンティティを作成することも可能です。それが構成上の慣習でない場合、私は何であるかわかりません。すべてを希望どおりに機能させる必要があると感じた場合は、多くの設定が必要になると文句を言わないでください。それが可能であることを喜んでください。
Michael Borgwardt 2013

2
4つの注釈があなたを悲しくさせる理由がわかりません。同等のxmlファイルはどのように見えますか?
NimChimpsky 2013

ああ、XMLははるかに悪くなります:-)
Martijn Verburg 2013

0
<annotation-driven />

これがどこから来るのかXMLスキーマを指定する必要があります。

トランザクションマネージャーを定義する際のJPAトランザクション処理戦略のコンテキストである可能性が最も高い(Springのドキュメントで9.5.6。@ Transactionalの使用を参照)

アノテーション駆動型トランザクション処理を定義すると、Spring AOPはメソッドのアスペクトを自動的に作成して、メソッドの呼び出し前にトランザクションを開始(または既存のチェック)し、メソッドの呼び出しが終了した後でコミット(例外の場合はロールバック)します。


0

シングルトンの実装がある場合に注釈ベースのIoC / Bean作成が便利ですが、それを交換する必要があるかもしれません。

異なる依存クラス/インスタンスでBeanを繰り返し再利用する必要がある状況とは対照的です。

これらの場合、私はBeanをconfigで宣言し、通常、必要な依存関係のコンストラクター注入を行います。次に、上記のBeanを使用するクラスで、私は@Autowireそれから@Qualifier("")-それがファクトリーが機能すると想定している方法です。

シングルトンは、1つの結果のみを返すファクトリメソッドです。これが簡単に当てはまらない場合は、混ぜる必要がある場合です。

コンポーネントスキャンを使用する場合と使用しない場合については、これは実際には上記の基準と適切な判断の対象となります。私は通常、パッケージコンポーネントのスキャンについて非常に明確です。そうすれば、IoCセットアップの残りの部分をテストしながら、外部の依存関係(dbなど)をモックアウトできるテスト用の別のアプリケーションコンテキストを作成できます。

また@Component、プロジェクトにはライブラリコードはありません。いつどのようにBeanを使用する必要があるかわからないので、もし@Componentそれを使用すると、誤ってスキャンでそれを拾ってしまい、再利用性が制限されてしまいます。これらの場合、私は通常、ライブラリに定義されたアプリケーションコンテキストをいくつかの便利なBean宣言でデフォルトに設定し、私のメインプロジェクトはそのアプリケーションコンテキストへのインポートに含めることができます。

ここには宗教はありません。伝えるだけの経験


0

Springはオプションを提供し、元々はxmlベースの配線のみでした。後で注釈ベースの配線が追加されました。
両方を組み合わせて使用​​できるようになりました(多くの人がそうしています)。
豊富なドキュメントがSpringに含まれており、SpringsourceのWebサイトからダウンロードできます。専門的なトレーニング(これを行ったことはなく、保証することもできません)と、かなりの数の優れた本(私はAPressのPro Springが好きで、使用しているSpringのバージョンに適したリリースを選択しています)があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.