クラス 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 StringSE
language
属性。protected final Log
サブクラスで利用可能なロガー。static final StringSE
proxyTargetClass
属性。static final StringSE
refreshCheckDelay
属性。インターフェース org.springframework.core.Ordered から継承されたフィールド
HIGHEST_PRECEDENCE, LOWEST_PRECEDENCE
コンストラクターのサマリー
コンストラクターメソッドのサマリー
修飾子と型メソッド説明protected ScriptSource
convertToScriptSource
(StringSE beanName, StringSE scriptSourceLocator, ResourceLoader resourceLoader) 指定されたスクリプトソースロケータを ScriptSource インスタンスに変換します。protected ClassSE<?>
createCompositeInterface
(ClassSE<?>[] interfaces) 指定されたインターフェースの複合インターフェースクラスを作成し、指定されたインターフェースを 1 つの単一クラスに実装します。protected ClassSE<?>
createConfigInterface
(BeanDefinition bd, ClassSE<?>[] interfaces) 指定された Bean 定義の構成インターフェースを作成し、定義されたプロパティ値の setter メソッド、および init メソッドと destroy メソッド(定義されている場合)を定義します。protected ObjectSE
createRefreshableProxy
(TargetSource ts, ClassSE<?>[] interfaces, boolean proxyTargetClass) 指定された AOP TargetSource のリフレッシュ可能なプロキシを作成します。protected BeanDefinition
createScriptedObjectBeanDefinition
(BeanDefinition bd, StringSE scriptFactoryBeanName, ScriptSource scriptSource, ClassSE<?>[] interfaces) 指定されたスクリプト定義に基づいて、スクリプトオブジェクトの Bean 定義を作成し、スクリプトオブジェクトに関連する定義データ(つまり、Bean クラスとコンストラクター引数を除くすべて)を抽出します。protected BeanDefinition
指定されたスクリプト定義に基づいて ScriptFactory Bean 定義を作成し、ScriptFactory に関連する定義データのみ(つまり、Bean クラスとコンストラクター引数のみ)を抽出します。void
destroy()
シャットダウン時に内部 Bean ファクトリ(スクリプトに使用)を破棄します。int
getOrder()
このオブジェクトの順序値を取得します。protected ScriptSource
getScriptSource
(StringSE beanName, StringSE scriptSourceLocator) 指定された Bean の ScriptSource を取得し、まだキャッシュされていない場合は遅延して作成します。postProcessBeforeInstantiation
(ClassSE<?> beanClass, StringSE beanName) ターゲット Bean がインスタンス化される前に、この BeanPostProcessor を適用します。postProcessProperties
(PropertyValues pvs, ObjectSE bean, StringSE beanName) ファクトリが指定された Bean に適用する前に、指定されたプロパティ値を後処理します。ClassSE<?>
predictBeanType
(ClassSE<?> beanClass, StringSE beanName) 最終的にこのプロセッサーのInstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(java.lang.Class<?>, java.lang.String)
コールバックから返される Bean の型を予測します。protected void
prepareScriptBeans
(BeanDefinition bd, StringSE scriptFactoryBeanName, StringSE scriptedObjectBeanName) このポストプロセッサーが使用する内部 BeanFactory でスクリプト Bean を準備します。protected boolean
resolveProxyTargetClass
(BeanDefinition beanDefinition) protected long
resolveRefreshCheckDelay
(BeanDefinition beanDefinition) 指定されたScriptFactory
BeanDefinition
のリフレッシュチェック遅延を取得します。void
setBeanClassLoader
(ClassLoaderSE classLoader) Beanclass loader
SE を Bean インスタンスに提供するコールバック。void
setBeanFactory
(BeanFactory beanFactory) 所有ファクトリを Bean インスタンスに提供するコールバック。void
setDefaultProxyTargetClass
(boolean defaultProxyTargetClass) インターフェースではなくターゲットクラスをプロキシするためにリフレッシュ可能なプロキシを作成する必要があることを通知するフラグ。void
setDefaultRefreshCheckDelay
(long defaultRefreshCheckDelay) リフレッシュチェック間の遅延をミリ秒単位で設定します。void
setResourceLoader
(ResourceLoader resourceLoader) このオブジェクトが実行される ResourceLoader を設定します。クラス java.lang.ObjectSE から継承されたメソッド
clone, equalsSE, finalize, getClass, hashCode, notify, notifyAll, toString, wait, waitSE, waitSE
インターフェース org.springframework.beans.factory.config.BeanPostProcessor から継承されたメソッド
postProcessAfterInitialization, postProcessBeforeInitialization
インターフェース org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor から継承されたメソッド
postProcessAfterInstantiation
インターフェース org.springframework.beans.factory.config.SmartInstantiationAwareBeanPostProcessor から継承されたメソッド
determineBeanType, determineCandidateConstructors, getEarlyBeanReference
フィールドの詳細
コンストラクターの詳細
ScriptFactoryPostProcessor
public ScriptFactoryPostProcessor()
メソッドの詳細
setDefaultRefreshCheckDelay
public void setDefaultRefreshCheckDelay(long defaultRefreshCheckDelay) リフレッシュチェック間の遅延をミリ秒単位で設定します。デフォルトは -1 で、リフレッシュチェックはまったく行われません。実際のリフレッシュは、
ScriptSource
が変更されたことを示した場合にのみ発生することに注意してください。setDefaultProxyTargetClass
public void setDefaultProxyTargetClass(boolean defaultProxyTargetClass) インターフェースではなくターゲットクラスをプロキシするためにリフレッシュ可能なプロキシを作成する必要があることを通知するフラグ。- パラメーター:
defaultProxyTargetClass
- 設定するフラグ値
setBeanClassLoader
インターフェースからコピーされた説明:BeanClassLoaderAware
Beanclass loader
SE を Bean インスタンスに提供するコールバック。通常の Bean プロパティの設定後、ただし
InitializingBean's
InitializingBean.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
public int getOrder()インターフェースからコピーされた説明:Ordered
このオブジェクトの順序値を取得します。値が高いほど、優先度は低くなります。結果として、最も低い値を持つオブジェクトが最高の優先度を持ちます(サーブレット
load-on-startup
の値に多少似ています)。同じ順序の値は、影響を受けるオブジェクトの任意のソート位置になります。
predictBeanType
インターフェースからコピーされた説明:SmartInstantiationAwareBeanPostProcessor
最終的にこのプロセッサーのInstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(java.lang.Class<?>, java.lang.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(java.lang.Object, java.lang.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
指定されたScriptFactory
BeanDefinition
のリフレッシュチェック遅延を取得します。BeanDefinition
のキーREFRESH_CHECK_DELAY_ATTRIBUTE
に有効なNumber
SE 型である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
指定されたインターフェースの複合インターフェースクラスを作成し、指定されたインターフェースを 1 つの単一クラスに実装します。デフォルトの実装は、指定されたインターフェースの JDK プロキシクラスを構築します。
- パラメーター:
interfaces
- マージするインターフェース- 戻り値:
- クラスとしてマージされたインターフェース
- 関連事項:
createScriptedObjectBeanDefinition
protected BeanDefinition createScriptedObjectBeanDefinition(BeanDefinition bd, StringSE scriptFactoryBeanName, ScriptSource scriptSource, @Nullable ClassSE<?>[] interfaces) 指定されたスクリプト定義に基づいて、スクリプトオブジェクトの Bean 定義を作成し、スクリプトオブジェクトに関連する定義データ(つまり、Bean クラスとコンストラクター引数を除くすべて)を抽出します。- パラメーター:
bd
- 完全なスクリプト Bean 定義scriptFactoryBeanName
- 内部 ScriptFactory Bean の名前scriptSource
- スクリプト化された Bean の ScriptSourceinterfaces
- スクリプト化された Bean が実装することになっているインターフェース- 戻り値:
- 抽出された ScriptFactory Bean 定義
- 関連事項:
createRefreshableProxy
protected ObjectSE createRefreshableProxy(TargetSource ts, @Nullable ClassSE<?>[] interfaces, boolean proxyTargetClass) 指定された AOP TargetSource のリフレッシュ可能なプロキシを作成します。- パラメーター:
ts
- リフレッシュ可能な TargetSourceinterfaces
- プロキシインターフェース (ターゲットクラスによって実装されたすべてのインターフェースのプロキシを示すnull
の場合があります)- 戻り値:
- 生成されたプロキシ
- 関連事項:
destroy
public void destroy()シャットダウン時に内部 Bean ファクトリ(スクリプトに使用)を破棄します。- 次で指定:
- インターフェース
DisposableBean
のdestroy