2011-10-31 16 views
7

コードの調査の後、私が見つかりました:どのように工場出荷時の方法で豆を作ることができますが、工場はありませんか?

<bean id="TestBean" class="com.test.checkDate" 
factory-method="getPreviousDate"> 
<constructor-arg value ............. 

............................... 

することが可能になることができますどのように?おかげさまで

+0

「工場なし」とまったく同じ意味ですか?質問を言い換えることができれば、答えを得るのに役立つかもしれません。 –

答えて

24

ビーン定義で指定されたコンストラクタ引数がExampleBeanのコンストラクタへの引数として渡す に使用されるドキュメント

から。

<bean id="exampleBean" class="examples.ExampleBean" 
     factory-method="createInstance"> 
    <constructor-arg ref="anotherExampleBean"/> 
    <constructor-arg ref="yetAnotherBean"/> 
    <constructor-arg value="1"/> 
</bean> 

<bean id="anotherExampleBean" class="examples.AnotherBean"/> 
<bean id="yetAnotherBean" class="examples.YetAnotherBean"/> 

public class ExampleBean { 

    // a private constructor 
    private ExampleBean(...) { 
     ... 
    } 

    // a static factory method; the arguments to this method can be 
    // considered the dependencies of the bean that is returned, 
    // regardless of how those arguments are actually used. 
    public static ExampleBean createInstance (
      AnotherBean anotherBean, YetAnotherBean yetAnotherBean, int i) { 

     ExampleBean eb = new ExampleBean (...); 
     // some other operations... 
      return eb; 
    } 
} 

: は今の代わりにコンストラクタを使用しての、 春はインスタンスオブジェクトの を返すために、静的なファクトリメソッドを呼び出すように言われているこののバリエーションを考えます静的ファクトリメソッドへの引数は、コンストラクタが constructor-arg要素を実際に使用した場合とまったく同じで、 constructor-arg要素を介して供給されることに注意してください。また、ファクトリメソッドによって返されるクラスのタイプが であることは、 の静的ファクトリメソッドを含むクラスと同じタイプの である必要はないことに気づくことが重要です。インスタンス(非静的)ファクトリ メソッドは、 (class属性の代わりにfactory-bean属性を使用する場合を除いて) と基本的に同じ方法で使用されるため、ここでは詳細については説明しません。

+1

ありがとう...貴重な時間を節約しました。 – Lahniep

1

com.test.checkDateには、getPreviousDateという静的メソッドがあることを意味します。オブジェクトを作成する工場はcom.test.checkDateです。返されるオブジェクトの型はわかりませんが、コンフィグレーションには、おそらくjava.util.Dateと言われていません。

この定義では、返されるオブジェクトの型(クラス)は指定されず、ファクトリメソッドを含むクラスのみが指定されます。

constructor-argは、単にgetPreviousDateにパラメータとして渡されます。メソッドは静的なので、checkDateのインスタンスは必要ありません。技術的にはコンストラクタではないメソッドを呼び出すためにconstructor-argを使用すると面白そうに聞こえる場合は、静的メソッドが実際にオブジェクトを構築していると考えてください。あなたの答えの以前のバージョンでは、あなたが言及したので

「工場なし」、多分あなたはfactory-bean属性を必要とinstantiation using an instance factory methodの場合、考えているが、これはInstantiation with a static factory methodの場合です。

関連する問題