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>
MethodInvokingBean
, MethodInvoker
targetClass
コンストラクターと説明 |
---|
MethodInvokingFactoryBean() |
修飾子と型 | メソッドと説明 |
---|---|
void | afterPropertiesSet() |
ObjectSE | getObject() singleton プロパティが "true" に設定されている場合は毎回同じ値を返し、そうでない場合は指定されたメソッドをその場で呼び出して返された値を返します。 |
ClassSE<?> | getObjectType() この FactoryBean が作成するオブジェクトの型、または事前に不明な場合は null を返します。 |
boolean | isSingleton() このファクトリによって管理されるオブジェクトはシングルトンですか? つまり、 FactoryBean.getObject() は常に同じオブジェクト(キャッシュ可能な参照)を返しますか? |
void | setSingleton(boolean singleton) シングルトンを作成するかどうかを設定します。それ以外の場合は、各 getObject() リクエストで新しいオブジェクトを作成します。 |
getDefaultTypeConverter, invokeWithTargetException, resolveClassName, setBeanClassLoader, setBeanFactory
doFindMatchingMethod, findMatchingMethod, getTypeConverter, registerCustomEditor, setTypeConverter
getArguments, getPreparedMethod, getTargetClass, getTargetMethod, getTargetObject, getTypeDifferenceWeight, invoke, isPrepared, prepare, setArguments, setStaticMethod, setTargetClass, setTargetMethod, setTargetObject
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public void setSingleton(boolean singleton)
getObject()
リクエストで新しいオブジェクトを作成します。デフォルトは "true" です。public void afterPropertiesSet() throws ExceptionSE
InitializingBean
BeanFactoryAware
、ApplicationContextAware
などを満たした後、包含 BeanFactory
によって呼び出されます。このメソッドにより、Bean インスタンスは、すべての Bean プロパティが設定されたときに、その全体的な構成の検証と最終的な初期化を実行できます。
InitializingBean
の afterPropertiesSet
MethodInvokingBean
の afterPropertiesSet
ExceptionSE
- 構成の誤り(必須プロパティの設定の失敗など)の場合、またはその他の理由で初期化が失敗した場合 @Nullable public ObjectSE getObject() throws ExceptionSE
FactoryBean<ObjectSE>
の getObject
null
にすることができます)ExceptionSE
- 作成エラーの場合 FactoryBeanNotInitializedException
public ClassSE<?> getObjectType()
null
を返します。FactoryBean<ObjectSE>
の getObjectType
null
ListableBeanFactory.getBeansOfType(java.lang.Class<T>)
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
FactoryBean.getObject()
, SmartFactoryBean.isPrototype()