[Seasar-user:9199] 継承したクラスとTooManyRegistrationRuntimeException
Nishioka Naoto
[E-MAIL ADDRESS DELETED]
2007年 7月 18日 (水) 08:28:47 JST
お世話になっております、にしおかです。
class Aa
class Ab extends Aa
という2つのクラスをdiconで登録した後、
S2Container#getComponent(Aa.class)でAaオブジェクトを取得
使用とした場合、
TooManyRegistrationRuntimeException
が発生してしまいます。
クラスAaから見た場合、instanceof Aaがtrueを戻すのが
Aaのオブジェクト/Abのオブジェクトの2つ存在することが
原因だとは思うのですが、こういう場合、クラスではなく
コンポーネント名でgetComponentを行うしかないのでしょうか?
それとも、他に何か回避方法はありますでしょうか?
以下、テストに使用したソースで、2.4.13でテストしています。
【test3.dicon】
<components>
<component class="test3.HogeParent">
<interType>
<component class="org.seasar.framework.aop.intertype.PropertyInterType"/>
</interType>
</component>
<component class="test3.HogeChild">
<interType>
<component class="org.seasar.framework.aop.intertype.PropertyInterType"/>
</interType>
</component>
</components>
【HogeParent.java】
package test3;
public class HogeParent {
public String fuga;
}
【HogeChild.java】
package test3;
public class HogeChild extends HogeParent {
public String fugaChild;
}
【Hoge.java】
package test3;
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.S2ContainerFactory;
public class Hoge {
public static void main(String[] args) throws Exception {
S2Container container = S2ContainerFactory.create("test3.dicon");
container.init();
HogeParent parent = (HogeParent)container.getComponent(HogeParent.class);
System.out.println(parent);
}
}
これらを準備し、Hoge.javaを実行すると、
Exception in thread "main" org.seasar.framework.container.TooManyRegistrationRuntimeException:
[ESSR0045]class test3.HogeParentに複数のコンポーネント(test3.HogeParent, test3.HogeChild)が登録されています
at org.seasar.framework.container.impl.TooManyRegistrationComponentDefImpl.getComponent(TooManyRegistrationComponentDefImpl.java:45)
at org.seasar.framework.container.impl.S2ContainerImpl.getComponent(S2ContainerImpl.java:124)
at test3.Hoge.main(Hoge.java:11)
といった例外が発生してしまいます。
--------------------------------------------------------
Nishioka Naoto
Seasar-user メーリングリストの案内