クラス ScriptFactoryPostProcessor

java.lang.ObjectSE
org.springframework.scripting.support.ScriptFactoryPostProcessor
実装されたすべてのインターフェース:
AwareBeanClassLoaderAwareBeanFactoryAwareBeanPostProcessorInstantiationAwareBeanPostProcessorSmartInstantiationAwareBeanPostProcessorDisposableBeanResourceLoaderAwareOrdered

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
  • フィールドの詳細

    • INLINE_SCRIPT_PREFIX

      public static final StringSE INLINE_SCRIPT_PREFIX
      インラインスクリプトを示す Resource -style プレフィックス。

      インラインスクリプトは、外部ファイルで定義されるのではなく、(通常は XML)構成で定義されるスクリプトです。

      関連事項:
    • REFRESH_CHECK_DELAY_ATTRIBUTE

      public static final StringSE REFRESH_CHECK_DELAY_ATTRIBUTE
      refreshCheckDelay 属性。
    • PROXY_TARGET_CLASS_ATTRIBUTE

      public static final StringSE PROXY_TARGET_CLASS_ATTRIBUTE
      proxyTargetClass 属性。
    • LANGUAGE_ATTRIBUTE

      public static final StringSE LANGUAGE_ATTRIBUTE
      language 属性。
    • logger

      protected final Log logger
      サブクラスで利用可能なロガー。
  • コンストラクターの詳細

    • ScriptFactoryPostProcessor

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

    • setDefaultRefreshCheckDelay

      public void setDefaultRefreshCheckDelay(long defaultRefreshCheckDelay)
      リフレッシュチェック間の遅延をミリ秒単位で設定します。デフォルトは -1 で、リフレッシュチェックはまったく行われません。

      実際のリフレッシュは、ScriptSource が変更されたことを示した場合にのみ発生することに注意してください。

      関連事項:
    • setDefaultProxyTargetClass

      public void setDefaultProxyTargetClass(boolean defaultProxyTargetClass)
      インターフェースではなくターゲットクラスをプロキシするためにリフレッシュ可能なプロキシを作成する必要があることを通知するフラグ。
      パラメーター:
      defaultProxyTargetClass - 設定するフラグ値
    • setBeanClassLoader

      public void setBeanClassLoader(ClassLoaderSE classLoader)
      インターフェースからコピーされた説明: BeanClassLoaderAware
      Bean class loaderSE を Bean インスタンスに提供するコールバック。

      通常の Bean プロパティの設定、ただし InitializingBean's InitializingBean.afterPropertiesSet() メソッドやカスタム init-method などの初期化コールバックの前に呼び出さます。

      次で指定:
      インターフェース BeanClassLoaderAwaresetBeanClassLoader 
      パラメーター:
      classLoader - 所有クラスローダー
    • setBeanFactory

      public void setBeanFactory(BeanFactory beanFactory)
      インターフェースからコピーされた説明: BeanFactoryAware
      所有ファクトリを Bean インスタンスに提供するコールバック。

      通常の Bean プロパティの設定後、ただし InitializingBean.afterPropertiesSet() またはカスタム init-method などの初期化コールバックの前に呼び出されます。

      次で指定:
      インターフェース BeanFactoryAwaresetBeanFactory 
      パラメーター:
      beanFactory - 所有 BeanFactory(非 null)。Bean は、ファクトリのメソッドをすぐに呼び出すことができます。
      関連事項:
    • setResourceLoader

      public void setResourceLoader(ResourceLoader resourceLoader)
      インターフェースからコピーされた説明: ResourceLoaderAware
      このオブジェクトが実行される ResourceLoader を設定します。

      これは ResourcePatternResolver であり、instanceof ResourcePatternResolver で確認できます。ResourcePatternUtils.getResourcePatternResolver メソッドも参照してください。

      通常の Bean プロパティの設定後、InitializingBean の afterPropertiesSet またはカスタム init メソッドのような初期コールバックの前に呼び出されます。ApplicationContextAware の setApplicationContext の前に呼び出されます。

      次で指定:
      インターフェース ResourceLoaderAwaresetResourceLoader 
      パラメーター:
      resourceLoader - このオブジェクトによって使用される ResourceLoader オブジェクト
      関連事項:
    • getOrder

      public int getOrder()
      インターフェースからコピーされた説明: Ordered
      このオブジェクトの順序値を取得します。

      値が高いほど、優先度は低くなります。結果として、最も低い値を持つオブジェクトが最高の優先度を持ちます(サーブレット load-on-startup の値に多少似ています)。

      同じ順序の値は、影響を受けるオブジェクトの任意のソート位置になります。

      次で指定:
      インターフェース OrderedgetOrder 
      戻り値:
      オーダー額
      関連事項:
    • predictBeanType

      @Nullable public ClassSE<?> predictBeanType(ClassSE<?> beanClass, StringSE beanName)
      インターフェースからコピーされた説明: SmartInstantiationAwareBeanPostProcessor
      最終的にこのプロセッサーの InstantiationAwareBeanPostProcessor.postProcessBeforeInstantiation(java.lang.Class<?>, java.lang.String) コールバックから返される Bean の型を予測します。

      デフォルトの実装は null を返します。特定の実装では、追加の処理手順を実行せずに、既知 / キャッシュされている限り、Bean 型を予測しようとする必要があります。

      次で指定:
      インターフェース SmartInstantiationAwareBeanPostProcessorpredictBeanType 
      パラメーター:
      beanClass - Bean の生のクラス
      beanName - Bean の名前
      戻り値:
      Bean の型、または予測できない場合は null 
    • postProcessProperties

      public PropertyValues postProcessProperties(PropertyValues pvs, ObjectSE bean, StringSE beanName)
      インターフェースからコピーされた説明: InstantiationAwareBeanPostProcessor
      ファクトリが指定された Bean に適用する前に、指定されたプロパティ値を後処理します。

      デフォルトの実装は、指定された pvs をそのまま返します。

      次で指定:
      インターフェース InstantiationAwareBeanPostProcessorpostProcessProperties 
      パラメーター:
      pvs - ファクトリが適用しようとしているプロパティ値 (非 null)
      bean - Bean インスタンスは作成されましたが、そのプロパティはまだ設定されていません
      beanName - Bean の名前
      戻り値:
      指定された Bean に適用する実際のプロパティ値(渡された PropertyValues インスタンスにすることができます)、またはプロパティの入力をスキップする null 
    • postProcessBeforeInstantiation

      public ObjectSE postProcessBeforeInstantiation(ClassSE<?> beanClass, StringSE beanName)
      インターフェースからコピーされた説明: InstantiationAwareBeanPostProcessor
      ターゲット Bean がインスタンス化される前に、この BeanPostProcessor を適用します。返される Bean オブジェクトは、ターゲット Bean の代わりに使用するプロキシであり、ターゲット Bean のデフォルトのインスタンス化を効果的に抑制します。

      このメソッドによって null 以外のオブジェクトが返された場合、Bean 作成プロセスは短絡されます。適用される追加の処理は、構成された BeanPostProcessors からの BeanPostProcessor.postProcessAfterInitialization(java.lang.Object, java.lang.String) コールバックのみです。

      このコールバックは、Bean クラスを持つ Bean 定義、および返された Bean 型がここに渡されるファクトリメソッド定義に適用されます。

      ポストプロセッサーは、ここで返される Bean オブジェクトの型を予測するために、拡張 SmartInstantiationAwareBeanPostProcessor インターフェースを実装できます。

      デフォルトの実装は null を返します。

      次で指定:
      インターフェース InstantiationAwareBeanPostProcessorpostProcessBeforeInstantiation 
      パラメーター:
      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

      protected long resolveRefreshCheckDelay(BeanDefinition beanDefinition)
      指定された ScriptFactory BeanDefinition のリフレッシュチェック遅延を取得します。BeanDefinition のキー REFRESH_CHECK_DELAY_ATTRIBUTE に有効な NumberSE 型である metadata attribute がある場合、この値が使用されます。それ以外の場合は、defaultRefreshCheckDelay 値が使用されます。
      パラメーター:
      beanDefinition - チェックする BeanDefinition
      戻り値:
      リフレッシュチェックの遅延
    • resolveProxyTargetClass

      protected boolean resolveProxyTargetClass(BeanDefinition beanDefinition)
    • createScriptFactoryBeanDefinition

      protected BeanDefinition createScriptFactoryBeanDefinition(BeanDefinition bd)
      指定されたスクリプト定義に基づいて ScriptFactory Bean 定義を作成し、ScriptFactory に関連する定義データのみ(つまり、Bean クラスとコンストラクター引数のみ)を抽出します。
      パラメーター:
      bd - 完全なスクリプト Bean 定義
      戻り値:
      抽出された ScriptFactory Bean 定義
      関連事項:
    • getScriptSource

      protected ScriptSource getScriptSource(StringSE beanName, StringSE scriptSourceLocator)
      指定された 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

      protected ClassSE<?> createConfigInterface(BeanDefinition bd, @Nullable ClassSE<?>[] interfaces)
      指定された Bean 定義の構成インターフェースを作成し、定義されたプロパティ値の setter メソッド、および init メソッドと destroy メソッド(定義されている場合)を定義します。

      この実装は、CGLIB の InterfaceMaker を介してインターフェースを作成し、指定されたインターフェースから(可能な限り)プロパティ型を決定します。

      パラメーター:
      bd - の構成インターフェースを作成するための Bean 定義(プロパティ値など)
      interfaces - チェックするインターフェース (生成することになっている setter に対応する getter を定義する可能性があります)
      戻り値:
      設定インターフェース
      関連事項:
    • createCompositeInterface

      protected ClassSE<?> createCompositeInterface(ClassSE<?>[] interfaces)
      指定されたインターフェースの複合インターフェースクラスを作成し、指定されたインターフェースを 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 の ScriptSource
      interfaces - スクリプト化された Bean が実装することになっているインターフェース
      戻り値:
      抽出された ScriptFactory Bean 定義
      関連事項:
    • createRefreshableProxy

      protected ObjectSE createRefreshableProxy(TargetSource ts, @Nullable ClassSE<?>[] interfaces, boolean proxyTargetClass)
      指定された AOP TargetSource のリフレッシュ可能なプロキシを作成します。
      パラメーター:
      ts - リフレッシュ可能な TargetSource
      interfaces - プロキシインターフェース (ターゲットクラスによって実装されたすべてのインターフェースのプロキシを示す null の場合があります)
      戻り値:
      生成されたプロキシ
      関連事項:
    • destroy

      public void destroy()
      シャットダウン時に内部 Bean ファクトリ(スクリプトに使用)を破棄します。
      次で指定:
      インターフェース DisposableBeandestroy