[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 メーリングリストの案内