[Seasar-user:2077] Re: injectDependencyについて
Masataka Kurihara
kurihara
2005年 6月 1日 (水) 16:21:19 JST
栗原です。
帰りました。で、見ました。残念!finalだったりprivateだったりして
いじれない。ま、一案として、以下の実装の(仕様の、ではない)変更
をしてもらえたとしましょう。
コードはメールで直接書いてるので、タイポはあるかもしれません。
・ AbstractComponentDeployerのAssemblerを用意する
メソッド群が全部private。以下がprotectedになるといじれる
private void setupAssemblerForAuto()
private void setupConstructorAssemblerForAuto()
private void setupAssemblerForConstructor()
private void setupAssemblerForProperty()
private void setupAssemblerForNone()
・ ComponentDeployerFactoryがfinalでいじりようない形なので、
たとえば以下のようにしてもらったとする。。。
public class ComponentDeployerFactory {
private static ComponentDeployerFactory _factory;
public static ComponentDeployerFactory getFactory() {
if(_factory == null) {
_factory = new ComponentDeployerFactory();
}
return _factory;
}
public static void setFactory(ComponentDeployerFactory factory) {
_factory = factory;
}
public ComponentDeployer create(ComponentDef componentDef) {
(略。非staticにするが、メソッドの内容は変更せず)
}
}
・ ComponentDefImplの中で、ComponentDeployerFactoryを呼んでるところ
をちょっと変更。
private synchronized ComponentDeployer getComponentDeployer() {
if (componentDeployer_ == null) {
ComponentDeployerFactory factory =
ComponentDeployerFactory.getFactorry();
componentDeployer_ = factory.create(this);
}
return componentDeployer_;
}
・ S2ContainerImplの中で、Componentをとるところをちょっと変更
private static final NullComponentDef NULL_COMP =
new NullComponentDef();
public ComponentDef getComponentDef(Object key)
throws ComponentNotFoundRuntimeException {
ComponentDef cd = getComponentDef0(key);
if (cd == null) {
cd = NULL_COMP;
}
return cd;
}
・ NullComponentDefをつくる
public class NullComponentDef extends SimpleComponentDef {
(コンストラクタとか、いろいろ実装の記述省略...)
public Object getComponent() {
throw new ComponentNotFoundRuntimeException();
}
}
上記の実装の変更があれば、横田さんの件も、私の件もアダプター
実装して差し込めそうかな。
> (でもAssemblerとかDeployerとかを理解していないのでまずはそっちを勉強して
> おきますね。)
ちなみに、この辺の資料?というか仕組みの超概略では昨年の11月の
からさわぎで、「ディープS2」としてセッションしました。SourceForgeにPPT
が上がってたハズ
--
株式会社グルージェント
栗原 傑享(くりはら まさたか)
渋谷区渋谷3-7-6 第6矢木ビル4F
TEL:03-5469-8869 FAX:03-5469-8879
URL:http://www.gluegent.com/
--
Seasar-user メーリングリストの案内