[Seasar-user:2166] Re: injectDependencyについて

Koichi Kobayashi koichik
2005年 6月 10日 (金) 02:30:24 JST


小林 (koichik) です.

On Thu, 09 Jun 2005 11:50:44 +0900
Masataka Kurihara <[E-MAIL ADDRESS DELETED]> wrote:

>   2通の説明読みました。ご指摘の通り、「エクステンションポイント」
> があって、そのエクステンションポイントでカスタマイズ機能を追加でき
> ればよく、また、そのカスタマイズ箇所はDeployerとAssemblerで、
> コンポーネントインスタンスの保持方法および初期化機能について
> 既存とは違った内容を作るのが、今の私が持っている要望です。
>   ということで、HowToのところ、より良い方法があればOK。

そんなわけで (どんなわけで?),S2ContainerBehavior というのを
でっちあげてみました (ソースを添付してます).

S2ContainerBehavior は S2ContainerImpl から以下のタイミングで
呼び出されます.

・hasComponent() が ComponentDef を取得する時.
・getComponent() が ComponentDef を取得する時.
・getComponentDef() が ComponentDef を取得する時.
・injectDependency() が ComponentDef を取得する時.
・getDescendant() が S2Container を取得する時.

S2ContainerBehavior のデフォルト実装は,従来の S2ContainerImpl と
同じ振る舞いをするようにしています.
これを置き換えることで,例えば次のように振る舞いを変更することが
できます.

・injectDependency() でコンポーネントが未定義の際にダミー (?) の
  ComponentDef を作成する (まさたかさんご所望の動作を実現).
・getComponent() でコンポーネントが未定義または TooMany の際に
  null を返す.
・getComponentDef() でコンポーネントが TooMany の際に TooMany〜
  例外をスローする.

# 最後の件,昨日の [Seasar-user:2150] では JavaDoc では TooMany〜 が
# スローされることになってると書いてしまいましたが,勘違いでした.m(__)m

もはや S2ContainerImpl 自身は ComponentNotFound〜 や TooMany〜 例外を
直接スローすることはありません.S2ContainerBehavior 次第です.
# 元々 TooMany〜 は S2ContainerImpl ではなく ComponetDef がスローしてます.
# だから getComponentDef() は TooMany〜 をスローしない.

そんなわけで (どんなわけで?),私のワークスペースではかなりの
カスタマイザビリティが実現されています.
従来から出来ることも含めて次の通り.

・S2ContainerFactory を入れ替えることが出来ます.
・S2ContainerFactory に PathResolver を設定することができます.
・S2ContainerBuilder を入れ替えたり追加したりすることが出来ます.
・S2ContainerBuilder に ResourceResolver を設定することが出来ます.
・XmlS2ContainerBuilder に TagHandlerRule を設定することが出来ます.
・S2ContainerTagHandlerRule に各種 TagHandler を設定することが出来ます.
・S2ContainerBehavior を入れ替えることが出来ます.
・ComponentDefFactory を入れ替えることが出来ます.
・ComponentDeployerFactory を入れ替えることが出来ます.
・AssemblerFactory を入れ替えることが出来ます.

相変わらず static メソッドに依存しまくりなので,異なった
コンフィグレーションを複数同時に使うようなことはできませんが
(クラスローダーを切り替えれば可能です),これでも十分ではないかと.

もっとも,これが全部リリースされるとは限らないのでご注意ください.
コミッタ間で合意が得られたもののみリリースに含められることになります.
とりあえず,まさたかさん的にはこれで納得頂けるでしょうか?


-- 
<signature>
    <name>Koichi Kobayashi</name>
    <e-mail>[E-MAIL ADDRESS DELETED]</e-mail>
</signature>
-------------- next part --------------
テキスト形式以外の添付ファイルを除去しました...
ファイル名: S2ContainerBehavior.java
型:         application/octet-stream
サイズ:     7783 バイト
説明:       無し
URL:        http://lists.sourceforge.jp/mailman/archives/seasar-user/attachments/20050610/2a9175ad/S2ContainerBehavior-0001.obj



Seasar-user メーリングリストの案内