public class PropertyPathFactoryBean extends ObjectSE implements FactoryBean<ObjectSE>, BeanNameAware, BeanFactoryAware
FactoryBean
。ターゲットオブジェクトは、直接または Bean 名を介して指定できます。
使用例:
<!-- target bean to be referenced by name --> <bean id="tb" class="org.springframework.beans.TestBean" singleton="false"> <property name="age" value="10"/> <property name="spouse"> <bean class="org.springframework.beans.TestBean"> <property name="age" value="11"/> </bean> </property> </bean> <!-- will result in 12, which is the value of property 'age' of the inner bean --> <bean id="propertyPath1" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"> <property name="targetObject"> <bean class="org.springframework.beans.TestBean"> <property name="age" value="12"/> </bean> </property> <property name="propertyPath" value="age"/> </bean> <!-- will result in 11, which is the value of property 'spouse.age' of bean 'tb' --> <bean id="propertyPath2" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"> <property name="targetBeanName" value="tb"/> <property name="propertyPath" value="spouse.age"/> </bean> <!-- will result in 10, which is the value of property 'age' of bean 'tb' --> <bean id="tb.age" class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>
構成ファイルで Spring 2.0 および XML スキーマのサポートを使用している場合は、プロパティパスアクセスに次のスタイルの構成を使用することもできます。(その他の例については、Spring リファレンスマニュアルの「XML スキーマベースの構成」という付録を参照してください。)
<!-- will result in 10, which is the value of property 'age' of bean 'tb' --> <util:property-path id="name" path="testBean.age"/>提案と最初のプロトタイプを作成してくれた Matthias Ernst に感謝します。
setTargetObject(java.lang.Object)
, setTargetBeanName(java.lang.String)
, setPropertyPath(java.lang.String)
コンストラクターと説明 |
---|
PropertyPathFactoryBean() |
修飾子と型 | メソッドと説明 |
---|---|
ObjectSE | getObject() このファクトリによって管理されるオブジェクトのインスタンス(おそらく共有または独立)を返します。 |
ClassSE<?> | getObjectType() この FactoryBean が作成するオブジェクトの型、または事前に不明な場合は null を返します。 |
boolean | isSingleton() この FactoryBean はしばしばシングルトンターゲットに使用されますが、プロパティパスに対して呼び出された getter は各呼び出しに対して新しいオブジェクトを返す可能性があるため、各 getObject() 呼び出しに対して同じオブジェクトを返さないと想定する必要があります。 |
void | setBeanFactory(BeanFactory beanFactory) 所有ファクトリを Bean インスタンスに提供するコールバック。 |
void | setBeanName(StringSE beanName) "targetObject" も "targetBeanName" も "propertyPath" も指定されていない場合、この PropertyPathFactoryBean の Bean 名は "beanName.property" パターンとして解釈されます。 |
void | setPropertyPath(StringSE propertyPath) ターゲットに適用するプロパティパスを指定します。 |
void | setResultType(ClassSE<?> resultType) プロパティパスを評価した結果の型を指定します。 |
void | setTargetBeanName(StringSE targetBeanName) プロパティパスを適用するターゲット Bean の名前を指定します。 |
void | setTargetObject(ObjectSE targetObject) プロパティパスを適用するターゲットオブジェクトを指定します。 |
cloneSE, equalsSE, finalizeSE, getClassSE, hashCodeSE, notifySE, notifyAllSE, toStringSE, waitSE, waitSE, waitSE
public void setTargetObject(ObjectSE targetObject)
targetObject
- ターゲットオブジェクト、たとえば Bean 参照または内部 BeansetTargetBeanName(java.lang.String)
public void setTargetBeanName(StringSE targetBeanName)
targetBeanName
- 含まれている Bean ファクトリで検索される Bean 名 (例: "testBean" )setTargetObject(java.lang.Object)
public void setPropertyPath(StringSE propertyPath)
propertyPath
- 潜在的にネストされたプロパティパス (たとえば「年齢」または "spouse.age" )public void setResultType(ClassSE<?> resultType)
メモ: これは、直接指定されたターゲットオブジェクトまたはシングルトンターゲット Bean には必要ありません。型はイントロスペクションによって判別できます。型によるマッチングが必要な場合(たとえば、オートワイヤーの場合)、プロトタイプターゲットの場合はこれを指定します。
resultType
- 結果型、たとえば "java.lang.Integer" public void setBeanName(StringSE beanName)
BeanNameAware
の setBeanName
beanName
- ファクトリ内の Bean の名前。この名前は、ファクトリで使用される実際の Bean 名であり、最初に指定した名前とは異なる場合があります。特に内部 Bean 名の場合、実際の Bean 名は "#..." サフィックスを追加することで一意になります。必要に応じて、BeanFactoryUtils.originalBeanName(String)
メソッドを使用して、元の Bean 名(サフィックスなし)を抽出します。public void setBeanFactory(BeanFactory beanFactory)
BeanFactoryAware
通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet()
またはカスタム init-method などの初期化コールバックの前に呼び出されます。
BeanFactoryAware
の setBeanFactory
beanFactory
- 所有 BeanFactory(非 null
)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。BeanInitializationException
@Nullable public ObjectSE getObject() throws BeansException
FactoryBean
BeanFactory
と同様に、これにより、シングルトンとプロトタイプの両方のデザインパターンをサポートできます。
この FactoryBean が呼び出し時にまだ完全に初期化されていない場合(たとえば、循環参照に関係しているため)、対応する FactoryBeanNotInitializedException
をスローします。
Spring 2.0 以降、FactoryBeans は null
オブジェクトを返すことができます。ファクトリはこれを通常の値として使用します。この場合、FactoryBeanNotInitializedException はスローされません。FactoryBean の実装では、必要に応じて FactoryBeanNotInitializedException 自体をすぐにスローすることをお勧めします。
FactoryBean<ObjectSE>
の getObject
null
にすることができます)BeansException
FactoryBeanNotInitializedException
public ClassSE<?> getObjectType()
FactoryBean
null
を返します。これにより、たとえばオートワイヤーなどで、オブジェクトをインスタンス化せずに特定の型の Bean を確認できます。
シングルトンオブジェクトを作成している実装の場合、このメソッドはシングルトンの作成を可能な限り回避しようとします。むしろ、事前に型を推定する必要があります。プロトタイプの場合、ここで意味のある型を返すこともお勧めします。
このメソッドは、この FactoryBean が完全に初期化される前に呼び出すことができます。初期化中に作成された状態に依存しないでください。もちろん、利用可能な場合はそのような状態を引き続き使用できます。
注意 : オートワイヤーは、ここで null
を返す FactoryBeans を単に無視します。FactoryBean の現在の状態を使用して、このメソッドを適切に実装することを強くお勧めします。
FactoryBean<ObjectSE>
の getObjectType
null
ListableBeanFactory.getBeansOfType(java.lang.Class<T>)
public boolean isSingleton()
getObject()
呼び出しに対して同じオブジェクトを返さないと想定する必要があります。FactoryBean<ObjectSE>
の isSingleton
FactoryBean.getObject()
, SmartFactoryBean.isPrototype()