2009-04-18 10 views
2

私はD.Iの巨大なファンです。
私は現在、D.I.を使用していない小規模なプロジェクトを開発中です。どこでも
(古典的で美しいD.I. 手で)。私の視点からJava:外生的なオブジェクトへの依存性注入?

次のような利点があります。

  • それは(あなたがそれに慣れてしまったとき、
  • は否定的な方法で 可読性には影響を与えません直感的です実際には、それはさらに良くなる)
  • しかし、最も重要なことは:もし私が欲しいのであればテスト一部または全部のプロジェクト いくつかのインターフェイスの実装が異なるため、複雑なリファクタリングや名前の変更などの回避策を使用する代わりに、 の文字数をに変更することで対応できます。

しかし、悲しいことに、私はどのようにD.I.外国で作成された オブジェクトをエレガントな方法で使用することができます(フレームワークなしで、 私は手動でD.Iを行います)。

D.I.手で:何かをc-torに渡す。 世界的な工場などはありません、神は禁じられています!

たとえば、JAXBはオブジェクトを単独で作成します。 " オブジェクトを作成するには、以下のパラメータを使用してください"というように、 がJAXBContextに伝える方法はありません。 JAXBは、パラメータのないc-torsのみを受け入れます。

アイデア?

答えて

0

人々はこれを行うためにgetter injectionを使用することが知られていました。私はluddite DI環境でこれを行う方法を知らないだろう。

2

JAXBContextでは、とにかくfactory methodを使用していませんか?コンストラクタと同じように、これにパラメータを渡すことができます。それがあなたの望むことをしないならば、あなたのオブジェクトを作成した後の伝統的なセッターインジェクション(すなわち、context.setXyz(xyzInstance)メソッドの呼び出し)は、春などが自動的に行うエミュレーションです。

+0

+1提案されているもののいずれかを使用します。あなたがまだそれを呼び出すコードの行に慣れていない場合は、それらをラップし、そのコードを別の場所に移動することができます。その制限とあなたはそれをある時点で処理しなければなりません。私はまた、Javaが許可するかどうかはわかりませんが、.netでは、すでにインスタンス化されたオブジェクトのコンストラクタをリフレクションで呼び出すことができます。 – eglasius

3

"DI by hand" 「何かをc-torに渡す」?

これを行うことができますか?

ThingOne one = new ThingOne(); 
one.setInjectedItem(a); 
one.setOtherInjectedItem(b); 

春依存性注入では、これはプロパティを介した注入であり、なぜこれを「手で」行うことができないのかわかりません。