[seasar-javadoc:421] Re: S2Container

Koichi Kobayashi koichik @ improvement.jp
2006年 7月 21日 (金) 02:02:10 JST


小林 (koichik) です.

Date:    Thu, 20 Jul 2006 09:36:51 +0900
From:    "Makoto Yonezawa" <stratosphire @ gmail.com>
To:      seasar-javadoc @ ml.seasar.org
Subject: [seasar-javadoc:416] Re: S2Container

> > どうせならホンモノのデスマにしちゃいましょう.
> > デスマ職人をお貸ししまっせ. (^^;
> 
> やっと収束してきたので、大丈夫です(^^;

遠慮なさらずに♪

> クラスコメント書いてなかったんですね
> ・・・びっくりです(w

(^^;;;;;

クラスコメントはまだまだ寂しいですね.
S2Container は S2 の顔みたいなクラスというか
インタフェースなので,それなりに充実した Javadoc に
なるといいなぁ♪

> それと、追加されていたメソッド
> 
> findAllComponents
> findLocalComponents
> findAllComponentDefs
> findLocalComponentDefs
> 
> のコメントを書きましたが・・・まずいですorz
> なんて実装の方もみたのですが、なんてかいていいのやら。
> で、こんな感じになってしまいました。

これはちゃんと説明しないと無理だろなぁと思ってました (笑).
実は追加された奴らは割と簡単で,

・findAllComponents() / findAllComponentDefs()

メソッドが呼ばれたコンテナの子孫を含む全コンテナから
キーにマッチする全てのコンポーネント (定義) の配列を返す.

・fincLocalComponents() / findLocalComponentDefs()

メソッドが呼ばれたコンテナのみから
キーにマッチする全てのコンポーネント (定義) の配列を返す.

分かりにくいのはむしろ,以前からある findComponents() /
findComponentDefs() だと思います.
これらは説明するのが難しいのですが...

メソッドが呼ばれたコンテナから近い順にキーにマッチする
コンポーネントを探し,最初に見つかったコンテナに登録
されている全てのコンポーネント (定義) の配列を返す.

とでも言えばいいのかなぁ.
「近い順」というのはコンポーネントの検索順と同じで,

1. 自分自身
2. 最初にインクルードしているコンテナ
2.1  2.が最初にインクルードしているコンテナ
2.1.1  2.1 が最初にインクルードしているコンテナ
...
2.2  2.が 2 番目にインクルードしているコンテナ
2.2.1  2.2 が最初にインクルードしているコンテナ
...
3. 2 番目にインクルードしているコンテナ
3.1  3.が最初にインクルードしているコンテナ
3.1.1  3.1 が最初にインクルードしているコンテナ
...
3.2  3.が 2 番目にインクルードしているコンテナ
3.2.1  3.2 が最初にインクルードしているコンテナ
...
4....

ということになります.

findComponents() / findComponentDefs() が返すのは
一つのコンテナに登録されているコンポーネントだけであり,
複数のコンテナに登録されているコンポーネントが一緒になって
返されることはありません.

例えばコンテナ A,B,C があり,A は B,C を
インクルードしていて,B と C にインタフェース
Foo を実装しているコンポーネントが登録されている
場合,

A.findComponents(Foo.class)
  -> B に登録されている Foo のみ

A.findAllComponents(Foo.class)
  -> B と C に登録されている Foo

A.findLocalComponents(Foo.class)
  -> 空の配列

という結果になります.

findComponents() / findComponentDefs() の動きは,
getComponent() に対応しています.

getComponent() が TooMany〜 にならずにコンポーネントを
返す場合,findComponents() は要素数が 1 の配列を返します.

getComponent() が TooMany〜 になる場合は,その時の
TooManyRegistrationComponentDef#getComponentDefs() と
同じ長さの配列を返します.

と,こんな具合です.
うまく Javadoc にまとめてください.(^^;


んで,肝心の Javadoc の方はまだ見れてません...
明日以降に拝見します.ごめんなさい.m(__)m


-- 
<component name="koichik">
    <property name="fullName">"Koichi Kobayashi"</property>
    <property name="email">"koichik @ improvement.jp"</property>
    <property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>



seasar-javadoc メーリングリストの案内