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

Yasuo Higa higa
2005年 4月 6日 (水) 01:08:06 JST


<20040308162954.5A0E.KURIHARA @ gluegent.com> の、
   "[Seasar-user:449] コンストラクタによるコンポーネント生成で問題" において、
   "Masataka Kurihara <kurihara @ gluegent.com>"さんは書きました:

ひがです。

> 栗原です。
> 
> さて、その気になる点ですが、コンポーネント生成時のコンス
> トラクタの選択で、仕様の間に落ちちゃってるところかなと思う
> パターンを報告します。
> 
> <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 ブロックでガツンといく感じに
> なり、例外の内容も添付のようにあまり直感的ではありません。
> ロケールにあったリソースが見えない旨を伝えているようなの
> で、また別の問題も複合しているのかもしれませんが、まず、
> この場合に、デフォルトコンストラクタがあるかどうかを判定
> はさんでもらったらいいのではないかと思います。
> 
プロパティのメッセージが{0]のように}の閉じ忘れでした。(^^;
後、***AssemblerでThrowableで受けて、Illegal*RuntimeExceptionを
投げ返していたのを、ComponentNotFoundRuntimeExceptionだけを
キャッチするように変えようと思います。
---
Yasuo Higa <higa @ isid.co.jp>
INFORMATION SERVICES INTERNATIONAL-DENTSU,LTD.



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