6

Spring 3.0 が JSR-330 の @Inject をサポートしているように見えるいくつかの Web ページから気付きました。Web アプリとスタンドアロン アプリケーションの両方のライブラリで依存性注入に JSR-299 構文を使用したいと考えており、Weld の代替手段があるため、Spring でこれができると便利です。

Spring の初心者なので、Spring Framework ディストリビューションをダウンロードして、すべての jar を Eclipse ビルド パスに配置してみました。Inject アノテーションがないため、Weld を使用した既存のテスト プロジェクトはコンパイルされませんでした。

これはSpringでできますか?実行するにはどうすればよいですか?

(最終的には Guice もこれをサポートすることを認識しています。現時点では SVN のみであり、それが可能な公式の Spring リリースがあれば、それがより良いでしょう。)


それはできます。JSR-330 jar は個別にダウンロードする必要があり、手動で記述された @Configuration クラスを解析するための cglib と、コモンズ ロギングの実装が必要です。

Weld との最大の違いは、配線を魔法のように見つけるのではなく、手動で作成する必要があることです (少し面倒ですが、より堅牢なアプリケーションを作成できる可能性があります)。さらに、起動時間がはるかに短くなります。私はまだSpringを初めて使用しています.@Configurationクラスを自動検出する方法はありますか?

4

2 に答える 2

4

Spring 3.0.xリファレンスドキュメントから:

以下の例では、Springの@Autowiredの代わりにJSR330の@Injectアノテーションを使用できます。@Injectには、注入される値がオプションであるかどうかを示すために必須のプロパティを持つSpringの@Autowireアノテーションとは異なり、必須のプロパティはありません。クラスパスにJSR330JARがある場合、この動作は自動的に有効になります。

したがって、@ Injectを使用してコードをDIフレームワークに依存しないようにすることができますが、javax.injectSpring自体はクラスを出荷しないため、プロジェクトにクラスを含むjarを含める必要があります。関連するjarは、 JSR-330のGoogleCodeサイトのダウンロードセクションにあります。

于 2010-06-16T17:48:05.603 に答える
2

このjavax.injectパッケージはSpring3の一部として含まれていませんが、存在する場合はサポートします。

のソースをAutowiredAnnotationBeanPostProcessor見ると、コンストラクターがリフレクションを使用してを見つけjavax.inject.Inject、見つかった場合はメッセージをログに記録していることがわかります。コンパイル時の依存関係はありません。

他のソース(JavaEE 6 SDKなど)からJSR-330JARを見つける必要があります。

于 2010-06-16T18:06:22.757 に答える