[Seasar-user:449] コンストラクタによるコンポーネント生成で問題

B gluegent.com Masataka Kurihara kurihara
2004年 3月 8日 (月) 16:43:38 JST


栗原です。

  EA2みさせてもらってます。ひがさんお疲れ様でした。AOP-IoC
コンテナとしてはほぼ機能そろってると思います。この後は、EA
をせっかく見ていますので、堅いフレームワークにするために気
になってる点などレポートできればと思います。
  さて、その気になる点ですが、コンポーネント生成時のコンス
トラクタの選択で、仕様の間に落ちちゃってるところかなと思う
パターンを報告します。

<components>
  <component class="org.seasar.extention.SpeakerImpl"/>
</components>

public class SpeakerImpl implements Speaker {
  private String name;
  public SpeakerImpl(String name) {
    this.name = name;
  }
  public String say() {
    return "こんにちは、" + name + "さん!";
  }
}

こういう実装だと、まず auto モードで引数をバインドしよう
にも、コンストラクタ引数は String 型なので無視して、デフ
ォルトコンストラクタで生成しようとします。しかし、この例
の SpeakerImpl ではデフォルトコンストラクタは不可視なの
で Class#newInstance() で例外です。
  このときの例外の出方が SingletonComponentDeployer
#deploy() 中の synchronized ブロックでガツンといく感じに
なり、例外の内容も添付のようにあまり直感的ではありません。
ロケールにあったリソースが見えない旨を伝えているようなの
で、また別の問題も複合しているのかもしれませんが、まず、
この場合に、デフォルトコンストラクタがあるかどうかを判定
はさんでもらったらいいのではないかと思います。

--
株式会社グルージェント
栗原 傑享(くりはら まさたか)
渋谷区渋谷3-7-6 第6矢木ビル4F
TEL:03-5469-8869 FAX:03-5469-8879
URL:http://www.gluegent.com/
--
-------------- next part --------------
平文でない添付ファイルを取り除きました...
ファイル名: stacktrace.txt
型:         application/octet-stream
サイズ:     1560 バイト
説明:       無し
URL:        http://lists.sourceforge.jp/mailman/archives/seasar-user/attachments/20040308/feaf759b/stacktrace-0001.obj



Seasar-user メーリングリストの案内