[Seasar] fifth contact

id:masataka_kさんのsearser-tutorialを追いかけて5日目。なんとか最後の「S20: メーカー研究所」まで到達。

今日はouterで悩んだ。

outerの場合には、S2Containerがコンポーネントを生成しません。よってinstanceモードがouterのコンポーネントを今までのように、S2Container#getComponent(*)で取得しようとすると、UnsupportedOperationException例外が発生します。outerは、コンテナ外部でコンポーネント生成を行い、S2Container#injectDependency(*)メソッドを用いて、プロパティ等の初期化だけを行います。

S2Container#injectDependency(*)を使った場合って引数で渡したコンポーネントはinjectionが行われたあとでそのままコンテナに登録されるわけではない。でもなぜか登録されるんものだと思い込んでいた。
うーん、コンテナが管理したいのはどこにどのDependencyをInjectionしたいのだから、特定さえ出来れば必ずしも外部で生成されたオブジェクト自身を管理(登録)する必要はないんだ、きっと。登録したかったらS2Container#register(*)をつかえばいいのだろう。

設定XMLは分割することができ、名前空間をもつ。ちょっと実験して二つのXML設定ファイルでお互いが他方をするようにしてみた。java.lang.StackOverflowErrorがおきた。たくさんに分割するときはincludeだけをする設定ファイルをひとつつくったら扱いやすいかな?

今日でチュートリアルの最後まで来た。よかったよかった。
でももうAOPのあたり忘れかけてる…。