Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

seasarでのinstance="prototype"に質問です。

seasarを勉強初めて間もないですが、
よくわからないことがありまして質問します。

diconファイルの定義で
S2Containerからインスタンスを貰う時、
毎回新しいインスタンスを取得する設定として
componentタグにinstance="prototype"を書いておけばいいと
思っていますが、何かうまく行きません。
私が勘違いしているような気もしますが・・・
簡単にソースの方を書きます。
ソースをベタベタ書くのはあまりよくないと
思いますが、この辺は大目でお願いします。

[test.TestVO]
public class TestVO {
  
}

[test.dicon]
.....
<component
 instance="prototype" class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister">
    <initMethod name="addClassPattern">
        <arg>"test"</arg>
        <arg>".*VO"</arg>
     </initMethod>
</component>

[Main.java]

(mainメソッドの中)

S2Container container = S2ContainerFactory.create("test/test.dicon");
container.init();

TestVO test1 = (TestVO) container.getComponent(TestVO.class);
System.out.println(test1.hashCode());

TestVO test2 = (TestVO) container.getComponent(TestVO.class);
System.out.println(test2.hashCode());

/////////////////
これを実行するとtest1とtest2のハッシュコード値が
一緒になります。

2

回答

5850

閲覧

2件の回答

評価

0

ア・・・・・・
すみません。間違いました。
ソースをここで載せる時、修正をしながら載せましてそのとき、
ソースが間違ってしました。

”test.dicon”のFileSystemComponentAutoRegisterの定義は
私が載せるときに作って書いたものです。
実際は
<component  instance="prototype" class="test.TestVO"/>
だけです。載せる時、その場で組んだロジック自体を勘違いしてました。(これ消したいな・・・T.T)

ひとつ分かったことですが、FileSystemComponentAutoRegisterで
設定する時はinstance="prototype"は設定してはいけないようです。
これを設定するとインスタンス取得時にエラーになります。
(自動バインディングすべてがこうなるのではないかと思いますが…)

本当にすみません。自己レスってことでお願いします。

評価

0

使ったことがないので分かりませんが、
一般的な話としてハッシュコードが同じでも、インスタンスが同じとは限りません(実装次第)。
プロパティを入れてみたりして、確認したのでしょうか?

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。