[Seasar-user:10823] Re: [S2Container] 共通のinterfaceを利用するクラスをSMART Deploy環境で実装する一般的な方法

Yasuo Higa [E-MAIL ADDRESS DELETED]
2007年 10月 2日 (火) 12:53:33 JST


ひがです。

> 近藤(nobu)です。
> 
> 初歩的な質問かもしれませんが、Seasar2.4のSMART Deploy環境にて、共通の
> interfaceを使用する複数のクラスを使用する一般的な方法はどのようなもの
> でしょうか?
> 
> 以下の例のようなクラスがあるとして、
> 
> ■例
> ・インターフェース
> public interface hoge
> {
>   String sayHello;
> }
> 
> ・クラスA
> public class hogeEnglishImpl implements hoge
> {
>   public String sayHello()
>   {
>     return "Hello";
>   }
> }
> 
> ・クラスB
> public class hogeJapaneseImpl implements hoge
> {
>   public String sayHello()
>   {
>     return "こんにちわ";
>   }
> }
> 
> これをコンテナから取得する際に、このときにS2Containerを使用して
> hogeEnglishImplのインスタンスを取得する方法がわかりません。
> Seasarの環境では、interface-Classが1:1で動作すると思っていますので
> hogeEnglishというinterfaceを用意しなければならないと思っています。
> で、今やっている方法が、hogeを継承したhogeEnglish/hogeJapaneseという
> interfaceを作成し、Implにはそれぞれを実装させています。
> 
クラスAはhogeEnglish、クラスBはhogeJapaneseという名前に
なっているので

public Hoge hogeEnglish;

public Hoge hogeJapanese;

のようなプロパティを定義しておけば、自動でバインディングされます。
ポイントは、プロパティ名とコンポーネント名を一致させることです。

S2Containerから直に取得するのはS2Containerに依存するので
あまりお勧めしませんが、どうしても必要なときには、
Hoge hogeEnglish = SingletonS2Container.getComponent(
    "hogeEnglist");
のように取得してください。

よろしくお願いします。

--
Yasuo Higa
[E-MAIL ADDRESS DELETED]



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