クラス MethodInvokingFactoryBean

実装されたすべてのインターフェース:
AwareBeanClassLoaderAwareBeanFactoryAwareFactoryBean<ObjectSE>InitializingBean

public class MethodInvokingFactoryBean extends MethodInvokingBean implements FactoryBean<ObjectSE>
静的メソッドまたはインスタンスメソッドの呼び出しの結果である値を返す FactoryBean。ほとんどのユースケースでは、同じ目的のためにコンテナーの組み込みのファクトリメソッドサポートを使用する方が適切です。これは、引数の変換がよりスマートです。このファクトリ Bean は、値を返さないメソッド(たとえば、ある種の初期化を強制する静的クラスメソッド)を呼び出す必要がある場合にも役立ちます。Bean インスタンスを取得するには戻り値が必要なため、このユースケースはファクトリメソッドではサポートされていません。

ファクトリメソッドへのアクセスに主に使用されることが予想されるため、このファクトリはデフォルトでシングルトン方式で動作することに注意してください。所有する Bean ファクトリによる getObject() への最初のリクエストにより、メソッドが呼び出され、その戻り値は後続のリクエストのためにキャッシュされます。内部 singleton プロパティを "false" に設定すると、このファクトリは、オブジェクトをリクエストされるたびにターゲットメソッドを呼び出すことができます。

NOTE: ターゲットメソッドが公開する結果を生成しない場合は、代わりに MethodInvokingBean を検討してください。これにより、この MethodInvokingFactoryBean に伴う型の決定とライフサイクルの制限が回避されます。

この呼び出し元は、あらゆる種類のターゲットメソッドをサポートします。静的メソッドを指定するには、targetMethod プロパティを静的メソッド名を表す文字列に設定します。targetClass は、静的メソッドが定義されているクラスを指定します。または、targetObject プロパティをターゲットオブジェクトとして設定し、targetMethod プロパティをそのターゲットオブジェクトで呼び出すメソッドの名前として設定することにより、ターゲットインスタンスメソッドを指定できます。メソッド呼び出しの引数は、arguments プロパティを設定することで指定できます。

このクラスは、InitializingBean 契約に従ってすべてのプロパティが設定された後に呼び出される afterPropertiesSet() に依存しています。

このクラスを使用して静的ファクトリメソッドを呼び出す Bean 定義の例(XML ベースの Bean ファクトリ定義で):

 <bean id="myObject" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
   <property name="staticMethod" value="com.whatever.MyClassFactory.getInstance"/>
 </bean>

静的メソッドを呼び出してインスタンスメソッドを呼び出し、Java システムプロパティを取得する例。やや冗長ですが、機能します。

 <bean id="sysProps" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
   <property name="targetClass" value="java.lang.System"/>
   <property name="targetMethod" value="getProperties"/>
 </bean>

 <bean id="javaVersion" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
   <property name="targetObject" ref="sysProps"/>
   <property name="targetMethod" value="getProperty"/>
   <property name="arguments" value="java.version"/>
 </bean>
導入:
21.11.2003
作成者:
Colin Sampaleanu, Juergen Hoeller
関連事項:
  • コンストラクターの詳細

    • MethodInvokingFactoryBean

      public MethodInvokingFactoryBean()
  • メソッドの詳細

    • setSingleton

      public void setSingleton(boolean singleton)
      シングルトンを作成するかどうかを設定します。それ以外の場合は、各 getObject() リクエストで新しいオブジェクトを作成します。デフォルトは "true" です。
    • afterPropertiesSet

      public void afterPropertiesSet() throws ExceptionSE
      インターフェースからコピーされた説明: InitializingBean
      すべての Bean プロパティを設定し、BeanFactoryAwareApplicationContextAware などを満たした後、包含 BeanFactory によって呼び出されます。

      このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。

      次で指定:
      インターフェース InitializingBeanafterPropertiesSet 
      オーバーライド:
      クラス MethodInvokingBeanafterPropertiesSet 
      例外:
      ExceptionSE - 構成の誤り(必須プロパティの設定の失敗など)の場合、またはその他の理由で初期化が失敗した場合
    • getObject

      @Nullable public ObjectSE getObject() throws ExceptionSE
      singleton プロパティが "true" に設定されている場合は毎回同じ値を返し、そうでない場合は指定されたメソッドをその場で呼び出して返された値を返します。
      次で指定:
      インターフェース FactoryBean<ObjectSE>getObject 
      戻り値:
      Bean のインスタンス (null にすることができます)
      例外:
      ExceptionSE - 作成エラーの場合
      関連事項:
    • getObjectType

      @Nullable public ClassSE<?> getObjectType()
      この FactoryBean が作成するオブジェクトの型、または事前に不明な場合は null を返します。
      次で指定:
      インターフェース FactoryBean<ObjectSE>getObjectType 
      戻り値:
      この FactoryBean が作成するオブジェクトの型、または呼び出し時に不明な場合は null 
      関連事項:
    • isSingleton

      public boolean isSingleton()
      インターフェースからコピーされた説明: FactoryBean
      このファクトリによって管理されるオブジェクトはシングルトンですか? つまり、FactoryBean.getObject() は常に同じオブジェクト(キャッシュ可能な参照)を返しますか?

      注意 : FactoryBean がシングルトンオブジェクトを保持することを示す場合、getObject() から返されたオブジェクトは所有 BeanFactory によってキャッシュされる可能性があります。FactoryBean が常に同じ参照を公開しない限り、true を返さないでください。

      FactoryBean 自体のシングルトンステータスは、通常、所有する BeanFactory によって提供されます。通常、そこではシングルトンとして定義する必要があります。

      注意 false を返すこのメソッドは、返されるオブジェクトが独立したインスタンスであることを必ずしも示しません。拡張 SmartFactoryBean インターフェースの実装は、SmartFactoryBean.isPrototype() メソッドを通じて独立したインスタンスを明示的に示す場合があります。この拡張インターフェースを実装しないプレーンな FactoryBean 実装は、isSingleton() 実装が false を返す場合、常に独立したインスタンスを返すと単純に想定されます。

      FactoryBean は通常シングルトンインスタンスを管理するため、デフォルトの実装は true を返します。

      次で指定:
      インターフェース FactoryBean<ObjectSE>isSingleton 
      戻り値:
      公開されたオブジェクトがシングルトンかどうか
      関連事項: