Develop with pleasure!

福岡でCloudとかBlockchainとか。

アウトジェクト

id:kimpoさんとの会話した際に紹介されたアウトジェクト。DI(IoC)コンテナの登場で依存性の注入がJavaの開発で一般的になってきて、インジェクションという言葉は既に聞き慣れたキーワードになっているが、アウトジェクトとは何ぞや?

Google先生に聞いてみると、JBossSeam関連の記事が引っかかる。
http://japan.internet.com/column/developer/20060808/26.htm
http://www.redhat.com/docs/manuals/jboss/jboss-eap-4.2/ja_JP/html/Seam_Reference_Guide/Seam_Reference_Guide-The_contextual_component_model-Bijection.html

従来のDIコンテナが、コンテナで生成・管理されているオブジェクトを、それを必要とするコードに対して注入するのがインジェクション。で、↑のSeamの記事で定義されているアウトジェクトは、コンテナにより注入されたオブジェクトを今度は逆にコンテナ側へと注入する機構として定義されている。つまりアプリケーションコードにインジェクションされたオブジェクトを再度コンテナへ反映することが可能になり、対象オブジェクトのステートの管理が可能になる。元々、Seamではコンポーネントのライフサイクルの管理が特徴ということもあり(フロー管理なんかに利用されてるんだろう)、アウトジェクトもその一部になる。ちなみにインジェクトもアウトジェクトも可能な場合、バイジェクションが可能という風に言うみたい。これに比べて、Seaser2やSpringFrameworkはインジェクションしかサポートしていない。

ただ、コンテナへと状態が変更されたオブジェクトを反映可能なアウトジェクトについては、きちんと使いどころを注意しないと混乱の元にもなる(まぁ、動的に状態管理するので)から要注意。

ちなみに、T2FrameworkDIコンテナとして開発されているLucyでは、スコープ拡張の拡張ポイントとしてアウトジェクトを利用するとあるけど、具体的にどういうふうにアウトジェクトを利用するんだろう?ソース見ると分かるのかな?
2008-11-30 - おおたに6号機blog
でもT2でSpringとGuice用のアダプター用意するとあるけど、アウトジェクトをサポートしていないDIコンテナを採用した場合でも同様の拡張が可能なんだろうか?