spring @injectをJSR-299の実装として交換することを理解できますか?
-
27-09-2019 - |
質問
私は、Spring 3.0がJSR-330の@Injectをサポートしているようです。 Webアプリとスタンドアロンアプリケーションの両方のライブラリで依存関係注入にJSR-299構文を使用したいので、溶接の代替品を持っているので、Springがこれを行うことができればいいでしょう。
春の初心者であるため、Spring Framework Distributionをダウンロードして、Eclipseビルドパスにすべての瓶を配置しました。注入注釈はありませんので、溶接を使用した既存のテストプロジェクトはコンパイルされませんでした。
これは春で行うことができますか?それを実行するために私は何をする必要がありますか?
(Guiceも最終的にこれをサポートすることを知っています。それは今のところSVNだけであり、公式の春のリリースがあれば、それはより良いでしょう。)
それはできます。 JSR-330 JARは、手動で書かれた@ConfigurationクラスとCommonsロギングの実装を解析するために、個別にダウンロードし、CGLIBをダウンロードする必要があります。
溶接との最大の違いは、配線を魔法のように発見する代わりに手動で書く必要があることです(もう少し面倒ですが、より堅牢なアプリケーションを作成する可能性があります)。さらに、スタートアップ時間ははるかに短くなります。私はまだ春が初めてです - @configurationクラスを自動化する方法はありますか?
解決
JSR 330の@Injectアノテーションは、以下の例でspringの@autowiredの代わりに使用できます。 @Injectには、注入されている値がオプションであるかどうかを示すために必要なプロパティがあるSpringの@Autowire Annotationとは異なり、必要なプロパティがありません。クラスパスにJSR 330 jarがある場合、この動作は自動的に有効になります。
したがって、 @injectを使用して、DIフレームワークのコードアグノーシスを作ることができますが、それでも瓶を含める必要があります。 javax.inject
Springはそれ自体を出荷していないため、プロジェクトのクラス。関連する瓶はダウンロードセクションで見つけることができます JSR-330のGoogleコードサイト.
他のヒント
javax.inject
パッケージはスプリング3の一部として含まれていませんが、存在する場合はサポートします。
ソースを見ると AutowiredAnnotationBeanPostProcessor
, 、コンストラクターが反射を使用して見つけます javax.inject.Inject
, 、そしてそれが見つけた場合にメッセージを記録します。コンパイル時間依存性はありません。
他のソース(Javaee 6 SDKなど)からJSR-330ジャーを見つける必要があります。