[seasar-javadoc:171] Re: InstanceDef

O.Goto o-goto @ try-net.or.jp
2006年 6月 4日 (日) 07:31:14 JST


後藤(goto)です。

On Sun, 04 Jun 2006 00:00:07 +0900
Koichi Kobayashi <koichik @ improvement.jp> wrote:

> 小林 (koichik) です.
> 
> Date:    Sat, 3 Jun 2006 17:03:02 +0900
> From:    "O.Goto" <o-goto @ try-net.or.jp>
> To:      seasar-javadoc @ ml.seasar.org
> Subject: [seasar-javadoc:165] Re: InstanceDef
> 
> > @see S2Container#getComponent(Object)は余計?
> > もともとの説明に書いてあったのですが今回削ったので@seeにしてみました。
> > ちょっと迷ってます。
> 
> この場合はなくてもいいような.
> 
では削除します。

> それより,
> 
> >  * コンポーネントのインスタンススコープが自身より短いコンポーネントをインジェクションすることは出来ません。 
> 
> この説明はちょっと難ありです.
> スコープが短いコンポーネントを設定すること自体は問題なく
> できます.
> ただし,それが開発者の意図とは異なる場合があるということです.
> 
> 例えば singleton のコンポーネント A と B があり,
> それぞれに DI されるコンポーネント X があるとします.
> もし X が singleton であれば,A と B に設定された
> X は同一のインスタンスです.
> 一方,X が prototype であれば,A と B には異なった
> X のインスタンスが設定されます.
> それが意図したとおりであれば,問題ありません.
> 
> しかし,sigleton のコンポーネントのメソッドが呼ばれるたびに
> prototype のコンポーネントが DI されると思う人が多いようです.
> 特に Web アプリケーションなどで目に付きますね.
> 
> そういう動きをして欲しい場合は PrototypeDelegateInterceptor を
> 使うことができます.
> 
> ということをうまくまとめて頂けると嬉しいです.
> よろしくお願いします.
> 
application、request、sessionについては間違っていないですよね?
ここでの説明ではsingletonとprototypeについては一切触れていないのですが・・・
singletonとprototypeはインスタンススコープという概念とは異なりますよね?
違和感を感じたので、ここでの説明は避けたのですが、
小林 (koichik) さんにすら誤解を与えてしまうようではダメダメな説明ってことですね。

誤解を招かないようにするにはsingletonとprototypeも説明に含めるしかないですかね?
でも先ほども書いたようにsingletonとprototypeにインスタンススコープというのは違和感を感じるのです。

singletonとprototypeについては私の認識は多分間違っていないと思うのですが、間違っていると問題なので確認です。

singletonにはsingletonとprototypeがインジェクション出来ます。
prototypeにはsingleton、prototypeがインジェクション出来ます。
(?prototypeにもapplication、request、sessionはインジェクション出来る?自信なし)

これ自体は間違っていないですよね?
この時点でapplication、request、sessionで書いたインスタンススコープの説明とは矛盾がでてしまいます。
singletonは唯一のインスタンス、prototypeは必要とされる度にインスタンスが生成されるというだけで、
それ以上でもそれ以下でもないと思うのです。

一方、application、request、sessionについては必要とされる度にインスタンスが生成されるという
prototypeの性質とスコープを絞れば唯一のインスタンスというsingletonの性質の2つを兼ね備えていると思うのですが、
これって間違っています?
インスタンスの格納先がそれぞれapplication、request、sessionになるわけですよね。

applicationにはapplication、singleton、prototypeがインジェクション出来ます。
sessionにはsession、application、singleton、prototypeがインジェクション出来ます。
requestにはrequest、session、application、singleton、prototypeがインジェクション出来ます。

これも間違っていないですよね?

これらの「〜は〜をインジェクション出来ます、」っていう説明を全て書いてしまえば解決?


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