[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 メーリングリストの案内