java.lang.Object
jdk.dynalink.DynamicLinkerFactory
public final class DynamicLinkerFactory extends Object
DynamicLinker
オブジェクトを作成するためのファクトリ・クラス。 動的リンカーは、Dynalinkの中央オブジェクトです。これらは、複数のGuardingDynamicLinker
オブジェクトで構成され、コール・サイトとそれらのリンクを調整します。 通常の動的リンカーは、ファクトリのユーザーが明示的に事前に作成し、setPrioritizedLinkers(List)
、automatically discovered
、および最後にsetFallbackLinkers(List)
で構成されたすべてのGuardingDynamicLinker
オブジェクトで構成されるリンカーです。この最後のカテゴリには通常、BeansLinker
が含まれます。 -
コンストラクタのサマリー
-
メソッドのサマリー
修飾子と型メソッド説明現在の構成に基づいて新しい動的リンカーを作成します。createLinker()
の最後の呼び出し時に自動的に検出されたリンカーをロードする際に検出されたServiceConfigurationError
のリストを返します。void
setAutoConversionStrategy
(MethodTypeConversionStrategy autoConversionStrategy) 自動型変換の変換方法を表すオブジェクトを設定します。void
setClassLoader
(ClassLoader classLoader) 使用可能な保護動的リンカーを自動検出するためのクラス・ローダーを設定します。void
setFallbackLinkers
(List<? extends GuardingDynamicLinker> fallbackLinkers) 動的リンカーを保護するフォールバックを設定します。void
setFallbackLinkers
(GuardingDynamicLinker... fallbackLinkers) 動的リンカーを保護するフォールバックを設定します。void
setInternalObjectsFilter
(MethodHandleTransformer internalObjectsFilter) このファクトリによって作成された動的リンカーのリンカー・サービスのLinkerServices.filterInternalObjects(MethodHandle)
の実装として機能するメソッド・ハンドル・トランスフォーマを設定します。void
setPrelinkTransformer
(GuardedInvocationTransformer prelinkTransformer) プリリンク変圧器を設定します。void
setPrioritizedLinker
(GuardingDynamicLinker prioritizedLinker) 優先リンカーを1つ設定します。void
setPrioritizedLinkers
(List<? extends GuardingDynamicLinker> prioritizedLinkers) 優先順位付けされた保護動的リンカーを設定します。void
setPrioritizedLinkers
(GuardingDynamicLinker... prioritizedLinkers) 優先順位付けされた保護動的リンカーを設定します。void
setSyncOnRelink
(boolean syncOnRelink) このファクトリによって作成された動的リンカーがコール・サイトの再リンク後にMutableCallSite.syncAll(MutableCallSite[])
を起動するかどうかを設定します。void
setUnstableRelinkThreshold
(int unstableRelinkThreshold) 不安定な再リンクしきい値を設定します。コール・サイトが再リンクされてから不安定と見なされる回数、およびそれに対する後続のリンク・リクエストがこれを示します。
-
コンストラクタの詳細
-
DynamicLinkerFactory
public DynamicLinkerFactory()デフォルト構成で新しい動的リンカー・ファクトリを作成します。 作成時に、ファクトリは様々なsetXxx()
メソッドを使用して構成でき、createLinker()
を使用して、現在の構成に従って1つ以上の動的リンカーを作成するために使用できます。
-
-
メソッドの詳細
-
setClassLoader
public void setClassLoader(ClassLoader classLoader) 使用可能な保護動的リンカーを自動検出するためのクラス・ローダーを設定します。 このクラス・ローダーで使用可能なGuardingDynamicLinkerExporter
実装は、ServiceLoader
メカニズムを使用して自動的にインスタンス化され、提供するリンカーは、このファクトリが作成するDynamicLinker
に組み込まれます。 これにより、この言語ランタイムに属するコール・サイトが、ネイティブ・オブジェクトがこのランタイムに渡される場合に、自動的に検出されたこれらのランタイムからリンカーによってリンクできる、言語間の相互運用が可能になります。 このメソッドを呼び出してクラス・ローダーが明示的に設定されていない場合は、createLinker()
を呼び出すスレッドのスレッド・コンテキスト・クラス・ローダーが使用されます。 このメソッドがnullで明示的に呼び出された場合、ServiceLoader.loadInstalled(Class)
を使用してリンカーをロードします。- パラメータ:
classLoader
- 使用可能なリンカーの自動検出に使用されるクラス・ローダー。
-
setPrioritizedLinkers
public void setPrioritizedLinkers(List<? extends GuardingDynamicLinker> prioritizedLinkers) 優先順位付けされた保護動的リンカーを設定します。 Dynalinkを使用する言語ランタイムには、通常、独自の言語用のリンカーが少なくとも1つあります。 これらのリンカーは、自動検出されたリンカーとフォールバック・リンカーの前に、呼び出しサイトをリンクしているときに、結果の動的リンカーによって最初に参照されます。 ファクトリが優先順位付けされたリンカーのいずれかと一致するリンカー・クラスも自動検出する場合、自動検出されたクラスは無視され、明示的な優先順位付けされたインスタンスが使用されます。- パラメータ:
prioritizedLinkers
- 優先リンカーのリスト。 nullも可。- 例外:
NullPointerException
- リスト要素のいずれかがnullの場合。
-
setPrioritizedLinkers
public void setPrioritizedLinkers(GuardingDynamicLinker... prioritizedLinkers) 優先順位付けされた保護動的リンカーを設定します。Arrays.asList(prioritizedLinkers)
でsetPrioritizedLinkers(List)
を呼び出すのと同じです。- パラメータ:
prioritizedLinkers
- 優先順位付けされたリンカーの配列。 nullも可。- 例外:
NullPointerException
- 配列要素のいずれかがnullの場合。
-
setPrioritizedLinker
public void setPrioritizedLinker(GuardingDynamicLinker prioritizedLinker) 優先リンカーを1つ設定します。 単一要素リストを使用してsetPrioritizedLinkers(List)
をコールする場合と同じです。- パラメータ:
prioritizedLinker
- 優先される単一のリンカー。 nullは不可。- 例外:
NullPointerException
- nullが渡された場合。
-
setFallbackLinkers
public void setFallbackLinkers(List<? extends GuardingDynamicLinker> fallbackLinkers) 動的リンカーを保護するフォールバックを設定します。 これらのリンカーは、自動検出され優先順位が付けられたリンカーのあとに、呼び出しサイトをリンクしているときに、結果の動的リンカーによって最後に参照されます。 ファクトリがフォールバック・リンカーの1つに一致するリンカー・クラスも自動検出した場合、自動検出されたクラスは無視され、明示的なフォールバック・インスタンスが使用されます。- パラメータ:
fallbackLinkers
- フォールバック・リンカーのリスト。 呼び出し元がフォールバック・リンカーを設定しないことを示すには、空にすることができます。 このメソッドが明示的に呼び出されない場合、またはnullが渡された場合、ファクトリはデフォルトのフォールバック・リンカーとして機能するBeansLinker
のインスタンスを作成します。- 例外:
NullPointerException
- リスト要素のいずれかがnullの場合。
-
setFallbackLinkers
public void setFallbackLinkers(GuardingDynamicLinker... fallbackLinkers) 動的リンカーを保護するフォールバックを設定します。Arrays.asList(fallbackLinkers)
でsetFallbackLinkers(List)
を呼び出すのと同じです。- パラメータ:
fallbackLinkers
- フォールバック・リンカーの配列。 呼び出し元がフォールバック・リンカーを設定しないことを示すには、空にすることができます。 このメソッドが明示的に呼び出されない場合、またはnullが渡された場合、ファクトリはデフォルトのフォールバック・リンカーとして機能するBeansLinker
のインスタンスを作成します。- 例外:
NullPointerException
- 配列要素のいずれかがnullの場合。
-
setSyncOnRelink
public void setSyncOnRelink(boolean syncOnRelink) このファクトリによって作成された動的リンカーがコール・サイトの再リンク後にMutableCallSite.syncAll(MutableCallSite[])
を起動するかどうかを設定します。 デフォルトはfalseです。 動的にリンクされたコードのマルチスレッド実行がランタイムでサポートされている場合は、trueに設定することをお薦めします。- パラメータ:
syncOnRelink
- 再リンク時に同期を起動する場合はtrue、それ以外の場合はfalse。
-
setUnstableRelinkThreshold
public void setUnstableRelinkThreshold(int unstableRelinkThreshold) 不安定な再リンクしきい値を設定します。コール・サイトが再リンクされてから不安定と見なされる回数、およびそれに対する後続のリンク・リクエストがこれを示します。 明示的に設定されていない場合、デフォルトは8です。- パラメータ:
unstableRelinkThreshold
- 新しいしきい値。 ゼロ未満にはできません。 ゼロの値は、呼び出しサイトが不安定であるとみなされないことを意味します。- 関連項目:
-
setPrelinkTransformer
public void setPrelinkTransformer(GuardedInvocationTransformer prelinkTransformer) プリリンク変圧器を設定します。 これは、コンポーネント・リンカーによって作成された後、および動的リンカーがコール・サイトにリンクする前に、ガードされた呼出しを変更するための最後の機会を得るGuardedInvocationTransformer
です。 通常は、呼出しの戻り値の型をコール・サイトの型に適応させるために使用されます。 明示的に設定しない場合、GuardedInvocation.asType(LinkerServices, MethodType)
をコールするデフォルトのリンク前トランスフォーマが使用されます。 カスタマイズされたリンク前トランスフォーマはほとんど必要ありません。これらは主に、コード最適化解除戦略などの高度な技術を実装するための構成要素として使用されます。- パラメータ:
prelinkTransformer
- 動的リンカー用のプリリンク・トランス。 nullにすると、ファクトリでデフォルトのトランスフォーマを使用できます。
-
setAutoConversionStrategy
public void setAutoConversionStrategy(MethodTypeConversionStrategy autoConversionStrategy) 自動型変換の変換方法を表すオブジェクトを設定します。LinkerServices.asType(MethodHandle, MethodType)
がすべてのカスタム変換をメソッド・ハンドルに適用した後も、通常はMethodHandle.asType(MethodType)
に従って自動的に適用できるmethod invocation conversions
を有効にする必要があります。 ただし、言語ランタイムは、それらの変換を自分のコール・サイト用にカスタマイズする場合もあります。 一般的な例として、通常のMethodHandles.asType()
ではデフォルトで禁止されているnullの戻り値のボックス化を解除できます。 この場合、言語ランタイムは、null値を処理できる独自のカスタム自動変換戦略をインストールできます。 ストラテジのMethodTypeConversionStrategy.asType(MethodHandle, MethodType)
が呼び出されると、カスタム言語変換はすでにメソッド・ハンドルに適用されるため、ハンドルの現在のメソッド・タイプと目的の最終タイプの違いは、常にメソッド呼出し変換の対象となるものにすぎません。 また、最終的なステップとして内部的に行われるため、最終的なMethodHandle.asType()
を呼び出す必要はありません。- パラメータ:
autoConversionStrategy
- このファクトリによって作成されたリンカーにメソッド呼出し変換を適用する方針。 カスタム戦略がない場合はnullにできます。
-
setInternalObjectsFilter
public void setInternalObjectsFilter(MethodHandleTransformer internalObjectsFilter) このファクトリによって作成された動的リンカーのリンカー・サービスのLinkerServices.filterInternalObjects(MethodHandle)
の実装として機能するメソッド・ハンドル・トランスフォーマを設定します。 一部の言語ランタイムには、スコープをエスケープしない内部オブジェクトを含めることができます。 ここでは、メソッド・ハンドルを変更するトランスフォーマを追加できます。これにより、内部言語ランタイム・オブジェクトを受け取る可能性のあるすべてのパラメータにフィルタが追加され、これらをラップしてエスケープできないようにできます。 トランスフォーマは、ラップされていないフィルタを戻り値に追加することもできます。DefaultInternalObjectFilter
は、このようなフィルタリング・トランスフォーマを簡単に作成するためのコンビニエンス・クラスとして提供されます。- パラメータ:
internalObjectsFilter
- 内部オブジェクトをフィルタリングするメソッド・ハンドル・トランスフォーマ、またはnull。
-
createLinker
public DynamicLinker createLinker()現在の構成に基づいて新しい動的リンカーを作成します。 このメソッドは、複数の動的リンカーを作成するために複数回呼び出すことができます。 自動的に検出されたリンカーは、このメソッドを呼び出すたびに新しくインスタンス化されます。 呼出し間でファクトリの構成を変更できます。 このメソッドはスレッド・セーフではありません。 起動後、呼出し側はgetAutoLoadingErrors()
を起動して、自動的に検出されたリンカーをロードしようとしたときに発生したServiceConfigurationError
のリストを取得できます。 これらは、このメソッドの呼出しからスローされることはありません。このメソッドからリカバリし、失敗したリンカーを無視するためにあらゆる努力をします。- 戻り値:
- 新しいダイナミック・リンカー
-
getAutoLoadingErrors
public List<ServiceConfigurationError> getAutoLoadingErrors()createLinker()
の最後の呼び出し時に自動的に検出されたリンカーをロードする際に検出されたServiceConfigurationError
のリストを返します。 これらは、Dynalink以外の特定のサービス構成の問題、およびファクトリが自動的にロードしようとしたエクスポート業者のDynalink固有のエラーです:- セキュリティ・マネージャを持つシステムで、
GuardingDynamicLinkerExporter.AUTOLOAD_PERMISSION_NAME
という名前のランタイム権限がありませんでした Supplier.get()
からnullを返しました。Supplier.get()
から返されたリストにnull要素がありました。
- 戻り値:
- 検出された
ServiceConfigurationError
の不変リスト。 空も可。
- セキュリティ・マネージャを持つシステムで、
-