[Seasar-user:21551] 名前空間名とコンポーネント名が衝突する場合にDIが失敗するケースがある

黒瀬健二 [E-MAIL ADDRESS DELETED]
2013年 1月 31日 (木) 23:05:29 JST


お世話になります。黒瀬と申します。




名前空間名とコンポーネント名が衝突する場合に、インジェクション
ができないケースに遭遇しまして、何か良い解決策があればと思い
メールさせていただきました。

状況としては以下のような感じです。

■diconのインクルード関係
app.dicon --> test.dicon (名前空間test)

■コンポーネントの登録状態
 −app.dicon (ルートコンテナ) にコンポーネント "test" が登録
 −test.diconに、名前空間testでコンポーネント"hogehoge"が登録

■コンポーネント名"test"のクラス定義
 (TestLogicクラスは、SmartDeployで自動登録されています)

@Component(name = "test", instance = InstanceType.SINGLETON)
public class TestLogic {

    @Binding(bindingType = BindingType.MUST, value = "test.hogehoge")
    private String data;

    ---- 省略 ----
}

このような状態でコンテナの初期化を行うと、上記dataフィールドのバイン
ディングに失敗してしまいます。

回避方法として
1)名前空間名と名前が同じになるようなコンポーネント名を指定しない
2)バインディングのコンポーネント名を明示的に指定しない
等あるかと思うのですが、可能な限り上記のソースは変更せずに対応できない
ものかと考えております。

何か良い方法があれば、ご教授いただければ幸いです。

Seasarバージョン:2.4.45
現象を再現するEclipseプロジェクト一式とスタックトレースを失礼ながら
添付させていただきました。
どうぞ、よろしくお願いいたします。

-------------- next part --------------
テキスト形式以外の添付ファイルを保管しました...
ファイル名: 添付一式.zip
型:         application/x-zip-compressed
サイズ:     49241 バイト
説明:       無し
URL:        <http://ml.seasar.org/archives/seasar-user/attachments/20130131/42749780/attachment.bin>


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