[Seasar-user:8091] Re: Seasar プロジェクトで学ぶ、ソースコードリーディング!
Koichi Kobayashi
[E-MAIL ADDRESS DELETED]
2007年 6月 6日 (水) 02:00:13 JST
小林 (koichik) です.
Date: Wed, 6 Jun 2007 01:21:38 +0900
From: "宮本大輔" <[E-MAIL ADDRESS DELETED]>
To: [E-MAIL ADDRESS DELETED]
Subject: [Seasar-user:8090] Re: Seasar プロジェクトで学ぶ、ソースコードリーディング!
> S2ContainerSelImpl, selパッケージ, SelContextImpl 等、「sel」という単語片がありますが、
> この「sel」は何を略したもので、どういった意図のものでしょうか?
Seasar Expression Language ですかねぇ.
JSP などの EL (Expression Language) と同類で,
式言語と呼ばれるものです.
今は OGNL という別の式言語が使われていて SEL は
使われていませんが,勉強目的ならシンプルな言語
処理系として見て損はないのではないかと.
# といいつつ,自分が Seasar に関わるようになった時は
# もう OGNL だったので SEL のソースは見たことありませんが.
> その後、ComponentDefImpl#assemble() 辺りに到達して、ちょっと雲行きが怪しくなって来て
> いるところですが、思いの外コードが読めるので、ちょっと嬉しくなっているところです。
assembler と deployer が DI コンテナとしての Seasar2 の
キモみたいなところなので頑張ってください!!
以下,多少 (?) ネタバレ気味なので最初は
見ない方がいいかも.(^^;
どうにも困ったら,あるいは assembler/deployer の
コードが理解できてからでも参考にどうぞ.
DI ではコンポーネントのプロパティに別のコンポーネントが
設定されたりするわけですが,その様子を次のように
表したとします.
+-----------+-------+
| | | DI +-----------+
| | prop1 |<-----| component |
| | | +-----------+
| +-------+
| | | DI +-----------+
| component | prop2 |<-----| component |
| | | +-----------+
| +-------+
| | | DI +-----------+
| | prop3 |<-----| component |
| | | +-----------+
+-----------+-------+
実際は右側のコンポーネントにもプロパティがあるので,
一つのコンポーネントに着目すると,
+-----------+-------+ DI
| | prop1 |<-----
DI | +-------+ DI
<-----| component | prop2 |<-----
| +-------+ DI
| | prop3 |<-----
+-----------+-------+
ということになります.
コンポーネントには他のコンポーネントが DI されるし,
他のコンポーネントに DI されもするということですね.
ここで図の右側,他のコンポーネントをプロパティ等に
DI するのが assembler パッケージ役割になります.
また,図の左側,他のコンポーネントに DI されたり,
コンテナの利用者が S2Container#getComponent() を
呼び出したりした場合のためにコンポーネントを
送り出すのが deployer パッケージの役割になります.
そんなわけで (どんなわけで?),S2Container 内部では
deployer +-----------+------+ assembler deployer +-----------+------+ assembler
<---------| component | prop |<---------- <---------| component | prop |<----------
+-----------+------+ +-----------+------+
という連鎖が起きていることになります.
実際には assembler や deployer は矢印に相当するわけでは
ないので,もしかすると誤解を招く図かもしれませんが,
このようにコンポーネントの右側 (assembler) と
左側 (deployer) で考えると役割を理解しやすいかと
思います.
--
<component name="koichik">
<property name="fullName">"Koichi Kobayashi"</property>
<property name="email">"[E-MAIL ADDRESS DELETED]"</property>
<property name="blog">"http://d.hatena.ne.jp/koichik"</property>
</component>
Seasar-user メーリングリストの案内