クラス ScriptFactoryPostProcessor
- 実装されているすべてのインターフェース:
Aware, BeanClassLoaderAware, BeanFactoryAware, BeanPostProcessor, InstantiationAwareBeanPostProcessor, SmartInstantiationAwareBeanPostProcessor, DisposableBean, ResourceLoaderAware, Ordered
ScriptFactory 定義を処理する BeanPostProcessor。各ファクトリを、それによって生成された実際のスクリプト Java オブジェクトで置き換えます。 これは FactoryBean メカニズムに似ていますが、スクリプト用に特別に調整されており、Spring のコアコンテナー自体には組み込まれていませんが、拡張機能として実装されています。
注意 : このポストプロセッサーの最も重要な特徴は、コンストラクター引数が ScriptFactory インスタンスに適用され、Bean プロパティ値が生成されたスクリプトオブジェクトに適用されることです。通常、コンストラクター引数にはスクリプトソースロケーターと潜在的にスクリプトインターフェースが含まれますが、Bean プロパティ値には、スクリプトオブジェクト自体に挿入するための参照と構成値が含まれます。
次の ScriptFactoryPostProcessor は、以下の 2 つの ScriptFactory 定義に自動的に適用されます。実行時に、実際のスクリプトオブジェクトは、ScriptFactory インスタンスではなく、"bshMessenger" および "groovyMessenger" に対して公開されます。これらは両方とも、ここでの例の Messenger インターフェースにキャスト可能であるはずです。
<bean class="org.springframework.scripting.support.ScriptFactoryPostProcessor"/> <bean id="bshMessenger" class="org.springframework.scripting.bsh.BshScriptFactory"> <constructor-arg value="classpath:mypackage/Messenger.bsh"/> <constructor-arg value="mypackage.Messenger"/> <property name="message" value="Hello World!"/> </bean> <bean id="groovyMessenger" class="org.springframework.scripting.groovy.GroovyScriptFactory"> <constructor-arg value="classpath:mypackage/Messenger.groovy"/> <property name="message" value="Hello World!"/> </bean>
注意 : 上記の Spring XML Bean 定義ファイルからの抜粋では、<Bean/> -style 構文のみが使用されていることに注意してください(ScriptFactoryPostProcessor 自体の使用を説明するため)。実際には、ScriptFactoryPostProcessor の <Bean/> 定義を明示的に作成することは決してありません。むしろ、'lang' 名前空間からタグをインポートし、その名前空間のタグを使用してスクリプト化された Bean を作成するだけです... その一環として、ScriptFactoryPostProcessor が暗黙的に作成されます。
Spring リファレンスドキュメントには、'lang' 名前空間でタグを使用する多数の例が含まれています。例として、'lang:groovy' タグを使用して定義された Groovy でサポートされた Bean を以下に示します。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:lang="http://www.springframework.org/schema/lang">
<!-- this is the bean definition for the Groovy-backed Messenger implementation -->
<lang:groovy id="messenger" script-source="classpath:Messenger.groovy">
<lang:property name="message" value="I Can Do The Frug" />
</lang:groovy>
<!-- an otherwise normal bean that will be injected by the Groovy-backed Messenger -->
<bean id="bookingService" class="x.y.DefaultBookingService">
<property name="messenger" ref="messenger" />
</bean>
</beans>- 導入:
- 2.0
- 作成者:
- Juergen Hoeller, Rob Harrop, Rick Evans, Mark Fisher, Sam Brannen
フィールドのサマリー
フィールド修飾子と型フィールド説明static final StringSEインラインスクリプトを示すResource-style プレフィックス。static final StringSElanguage属性。protected final org.apache.commons.logging.Logサブクラスで利用可能なロガー。static final StringSEproxyTargetClass属性。static final StringSErefreshCheckDelay属性。インターフェース Ordered から継承されたフィールド
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCEコンストラクターの概要
コンストラクター方法の概要
修飾子と型メソッド説明protected ScriptSourceconvertToScriptSource(StringSE beanName, StringSE scriptSourceLocator, ResourceLoader resourceLoader) 指定されたスクリプトソースロケータを ScriptSource インスタンスに変換します。protected ClassSE<?> createCompositeInterface(ClassSE<?>[] interfaces) 指定されたインターフェースの複合インターフェースクラスを作成し、指定されたインターフェースを 1 つの単一クラスに実装します。protected ClassSE<?> createConfigInterface(BeanDefinition bd, ClassSE<?> @Nullable [] interfaces) 指定された Bean 定義の構成インターフェースを作成し、定義されたプロパティ値の setter メソッド、および init メソッドと destroy メソッド(定義されている場合)を定義します。protected ObjectSEcreateRefreshableProxy(TargetSource ts, ClassSE<?> @Nullable [] interfaces, boolean proxyTargetClass) 指定された AOP TargetSource のリフレッシュ可能なプロキシを作成します。protected BeanDefinitioncreateScriptedObjectBeanDefinition(BeanDefinition bd, StringSE scriptFactoryBeanName, ScriptSource scriptSource, ClassSE<?> @Nullable [] interfaces) 指定されたスクリプト定義に基づいて、スクリプトオブジェクトの Bean 定義を作成し、スクリプトオブジェクトに関連する定義データ(つまり、Bean クラスとコンストラクター引数を除くすべて)を抽出します。protected BeanDefinition指定されたスクリプト定義に基づいて ScriptFactory Bean 定義を作成し、ScriptFactory に関連する定義データのみ(つまり、Bean クラスとコンストラクター引数のみ)を抽出します。voiddestroy()シャットダウン時に内部 Bean ファクトリ(スクリプトに使用)を破棄します。intgetOrder()このオブジェクトの順序値を取得します。protected ScriptSourcegetScriptSource(StringSE beanName, StringSE scriptSourceLocator) 指定された Bean の ScriptSource を取得し、まだキャッシュされていない場合は遅延して作成します。postProcessBeforeInstantiation(ClassSE<?> beanClass, StringSE beanName) ターゲット Bean がインスタンス化される前に、この BeanPostProcessor を適用します。postProcessProperties(PropertyValues pvs, ObjectSE bean, StringSE beanName) ファクトリが指定された Bean に適用する前に、指定されたプロパティ値を後処理します。predictBeanType(ClassSE<?> beanClass, StringSE beanName) 最終的にこのプロセッサーのInstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(Class, String)コールバックから返される Bean の型を予測します。protected voidprepareScriptBeans(BeanDefinition bd, StringSE scriptFactoryBeanName, StringSE scriptedObjectBeanName) このポストプロセッサーが使用する内部 BeanFactory でスクリプト Bean を準備します。protected booleanresolveProxyTargetClass(BeanDefinition beanDefinition) protected longresolveRefreshCheckDelay(BeanDefinition beanDefinition) 指定されたScriptFactoryBeanDefinitionのリフレッシュチェック遅延を取得します。voidsetBeanClassLoader(ClassLoaderSE classLoader) Beanclass loaderSE を Bean インスタンスに提供するコールバック。voidsetBeanFactory(BeanFactory beanFactory) 所有ファクトリを Bean インスタンスに提供するコールバック。voidsetDefaultProxyTargetClass(boolean defaultProxyTargetClass) インターフェースではなくターゲットクラスをプロキシするためにリフレッシュ可能なプロキシを作成する必要があることを通知するフラグ。voidsetDefaultRefreshCheckDelay(long defaultRefreshCheckDelay) リフレッシュチェック間の遅延をミリ秒単位で設定します。voidsetResourceLoader(ResourceLoader resourceLoader) このオブジェクトが実行される ResourceLoader を設定します。クラス ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSEインターフェース BeanPostProcessor から継承されたメソッド
postProcessAfterInitialization, postProcessBeforeInitializationインターフェース InstantiationAwareBeanPostProcessor から継承されたメソッド
postProcessAfterInstantiation
フィールドの詳細
INLINE_SCRIPT_PREFIX
REFRESH_CHECK_DELAY_ATTRIBUTE
refreshCheckDelay属性。PROXY_TARGET_CLASS_ATTRIBUTE
proxyTargetClass属性。LANGUAGE_ATTRIBUTE
language属性。logger
protected final org.apache.commons.logging.Log loggerサブクラスで利用可能なロガー。
コンストラクターの詳細
ScriptFactoryPostProcessor
public ScriptFactoryPostProcessor()
メソッドの詳細
setDefaultRefreshCheckDelay
public void setDefaultRefreshCheckDelay(long defaultRefreshCheckDelay) リフレッシュチェック間の遅延をミリ秒単位で設定します。デフォルトは -1 で、リフレッシュチェックはまったく行われません。実際のリフレッシュは、
ScriptSourceが変更されたことを示した場合にのみ発生することに注意してください。- 関連事項:
setDefaultProxyTargetClass
public void setDefaultProxyTargetClass(boolean defaultProxyTargetClass) インターフェースではなくターゲットクラスをプロキシするためにリフレッシュ可能なプロキシを作成する必要があることを通知するフラグ。- パラメーター:
defaultProxyTargetClass- 設定するフラグ値
setBeanClassLoader
インターフェースからコピーされた説明:BeanClassLoaderAwareBeanclass loaderSE を Bean インスタンスに提供するコールバック。通常の Bean プロパティの設定後、ただし
InitializingBean'sInitializingBean.afterPropertiesSet()メソッドやカスタム init-method などの初期化コールバックの前に呼び出されます。- 次で指定:
- インターフェース
BeanClassLoaderAwareのsetBeanClassLoader - パラメーター:
classLoader- 所有クラスローダー
setBeanFactory
インターフェースからコピーされた説明:BeanFactoryAware所有ファクトリを Bean インスタンスに提供するコールバック。通常の Bean プロパティの設定後、ただし
InitializingBean.afterPropertiesSet()またはカスタム init-method などの初期化コールバックの前に呼び出されます。- 次で指定:
- インターフェース
BeanFactoryAwareのsetBeanFactory - パラメーター:
beanFactory- 所有 BeanFactory(非null)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。- 関連事項:
setResourceLoader
インターフェースからコピーされた説明:ResourceLoaderAwareこのオブジェクトが実行される ResourceLoader を設定します。これは ResourcePatternResolver であり、
instanceof ResourcePatternResolverで確認できます。ResourcePatternUtils.getResourcePatternResolverメソッドも参照してください。通常の Bean プロパティの設定後、InitializingBean の
afterPropertiesSetまたはカスタム init メソッドのような初期コールバックの前に呼び出されます。ApplicationContextAware のsetApplicationContextの前に呼び出されます。- 次で指定:
- インターフェース
ResourceLoaderAwareのsetResourceLoader - パラメーター:
resourceLoader- このオブジェクトによって使用される ResourceLoader オブジェクト- 関連事項:
getOrder
predictBeanType
インターフェースからコピーされた説明:SmartInstantiationAwareBeanPostProcessor最終的にこのプロセッサーのInstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(Class, String)コールバックから返される Bean の型を予測します。デフォルトの実装は
nullを返します。特定の実装では、追加の処理手順を実行せずに、既知 / キャッシュされている限り、Bean 型を予測しようとする必要があります。- 次で指定:
- インターフェース
SmartInstantiationAwareBeanPostProcessorのpredictBeanType - パラメーター:
beanClass- Bean の生のクラスbeanName- Bean の名前- 戻り値:
- Bean の型、または予測できない場合は
null
postProcessProperties
インターフェースからコピーされた説明:InstantiationAwareBeanPostProcessorファクトリが指定された Bean に適用する前に、指定されたプロパティ値を後処理します。デフォルトの実装は、指定された
pvsをそのまま返します。- 次で指定:
- インターフェース
InstantiationAwareBeanPostProcessorのpostProcessProperties - パラメーター:
pvs- ファクトリが適用しようとしているプロパティ値 (非null)bean- Bean インスタンスは作成されましたが、そのプロパティはまだ設定されていませんbeanName- Bean の名前- 戻り値:
- 指定された Bean に適用する実際のプロパティ値(渡された PropertyValues インスタンスにすることができます)、またはプロパティの入力をスキップする
null
postProcessBeforeInstantiation
インターフェースからコピーされた説明:InstantiationAwareBeanPostProcessorターゲット Bean がインスタンス化される前に、この BeanPostProcessor を適用します。返される Bean オブジェクトは、ターゲット Bean の代わりに使用するプロキシであり、ターゲット Bean のデフォルトのインスタンス化を効果的に抑制します。このメソッドによって null 以外のオブジェクトが返された場合、Bean 作成プロセスは短絡されます。適用される追加の処理は、構成された
BeanPostProcessorsからのBeanPostProcessor.postProcessAfterInitialization(Object, String)コールバックのみです。このコールバックは、Bean クラスを持つ Bean 定義、および返された Bean 型がここに渡されるファクトリメソッド定義に適用されます。
ポストプロセッサーは、ここで返される Bean オブジェクトの型を予測するために、拡張
SmartInstantiationAwareBeanPostProcessorインターフェースを実装できます。デフォルトの実装は
nullを返します。- 次で指定:
- インターフェース
InstantiationAwareBeanPostProcessorのpostProcessBeforeInstantiation - パラメーター:
beanClass- インスタンス化される Bean のクラスbeanName- Bean の名前- 戻り値:
- ターゲット Bean のデフォルトのインスタンスの代わりに公開する Bean オブジェクト、またはデフォルトのインスタンス化を続行する
null - 関連事項:
prepareScriptBeans
protected void prepareScriptBeans(BeanDefinition bd, StringSE scriptFactoryBeanName, StringSE scriptedObjectBeanName) このポストプロセッサーが使用する内部 BeanFactory でスクリプト Bean を準備します。元の各 Bean 定義は、ScriptFactory 定義とスクリプト化されたオブジェクト定義に分割されます。- パラメーター:
bd- メイン BeanFactory の元の Bean 定義scriptFactoryBeanName- 内部 ScriptFactory Bean の名前scriptedObjectBeanName- 内部スクリプトオブジェクト Bean の名前
resolveRefreshCheckDelay
指定されたScriptFactoryBeanDefinitionのリフレッシュチェック遅延を取得します。BeanDefinitionのキーREFRESH_CHECK_DELAY_ATTRIBUTEに有効なNumberSE 型であるmetadata attributeがある場合、この値が使用されます。それ以外の場合は、defaultRefreshCheckDelay値が使用されます。- パラメーター:
beanDefinition- チェックする BeanDefinition- 戻り値:
- リフレッシュチェックの遅延
resolveProxyTargetClass
createScriptFactoryBeanDefinition
指定されたスクリプト定義に基づいて ScriptFactory Bean 定義を作成し、ScriptFactory に関連する定義データのみ(つまり、Bean クラスとコンストラクター引数のみ)を抽出します。- パラメーター:
bd- 完全なスクリプト Bean 定義- 戻り値:
- 抽出された ScriptFactory Bean 定義
- 関連事項:
getScriptSource
指定された Bean の ScriptSource を取得し、まだキャッシュされていない場合は遅延して作成します。- パラメーター:
beanName- スクリプト化された Bean の名前scriptSourceLocator- Bean に関連付けられたスクリプトソースロケーター- 戻り値:
- 対応する ScriptSource インスタンス
- 関連事項:
convertToScriptSource
protected ScriptSource convertToScriptSource(StringSE beanName, StringSE scriptSourceLocator, ResourceLoader resourceLoader) 指定されたスクリプトソースロケータを ScriptSource インスタンスに変換します。デフォルトでは、サポートされるロケータは、Spring リソースの場所 ( "file:C:/myScript.bsh"" や "classpath:myPackage/myScript.bsh" など) とインラインスクリプト ( "inline:myScriptText..." ) です。
- パラメーター:
beanName- スクリプト化された Bean の名前scriptSourceLocator- スクリプトソースロケータresourceLoader- 使用する ResourceLoader (必要ならば)- 戻り値:
- ScriptSource インスタンス
createConfigInterface
指定された Bean 定義の構成インターフェースを作成し、定義されたプロパティ値の setter メソッド、および init メソッドと destroy メソッド(定義されている場合)を定義します。この実装は、CGLIB の InterfaceMaker を介してインターフェースを作成し、指定されたインターフェースから(可能な限り)プロパティ型を決定します。
- パラメーター:
bd- 構成インターフェースを作成するための Bean 定義(プロパティ値など)interfaces- チェックするインターフェース (生成することになっている setter に対応する getter を定義する可能性があります)- 戻り値:
- 設定インターフェース
- 関連事項:
createCompositeInterface
createScriptedObjectBeanDefinition
protected BeanDefinition createScriptedObjectBeanDefinition(BeanDefinition bd, StringSE scriptFactoryBeanName, ScriptSource scriptSource, ClassSE<?> @Nullable [] interfaces) 指定されたスクリプト定義に基づいて、スクリプトオブジェクトの Bean 定義を作成し、スクリプトオブジェクトに関連する定義データ(つまり、Bean クラスとコンストラクター引数を除くすべて)を抽出します。- パラメーター:
bd- 完全なスクリプト Bean 定義scriptFactoryBeanName- 内部 ScriptFactory Bean の名前scriptSource- スクリプト化された Bean の ScriptSourceinterfaces- スクリプト化された Bean が実装することになっているインターフェース- 戻り値:
- 抽出された ScriptFactory Bean 定義
- 関連事項:
createRefreshableProxy
protected ObjectSE createRefreshableProxy(TargetSource ts, ClassSE<?> @Nullable [] interfaces, boolean proxyTargetClass) 指定された AOP TargetSource のリフレッシュ可能なプロキシを作成します。- パラメーター:
ts- リフレッシュ可能な TargetSourceinterfaces- プロキシインターフェース (ターゲットクラスによって実装されたすべてのインターフェースのプロキシを示すnullの場合があります)- 戻り値:
- 生成されたプロキシ
- 関連事項:
destroy
public void destroy()シャットダウン時に内部 Bean ファクトリ(スクリプトに使用)を破棄します。- 次で指定:
- インターフェース
DisposableBeanのdestroy