模块  jdk.dynalink
软件包  jdk.dynalink

Class DynamicLinkerFactory

    • 构造方法详细信息

      • DynamicLinkerFactory

        public DynamicLinkerFactory()
        使用默认配置创建新的动态链接器工厂。 一旦创建,工厂可以使用各种被配置setXxx()方法和用于根据使用其当前配置来创建一个或多个动态接头createLinker()
    • 方法详细信息

      • setClassLoader

        public void setClassLoader​(ClassLoader classLoader)
        设置类加载器以自动发现可用的保护动态链接器。 通过此类加载器可用的GuardingDynamicLinkerExporter实现将使用ServiceLoader机制自动实例化,并且它们提供的链接器将合并到此工厂创建的DynamicLinker 这允许跨语言互操作性,其中属于该语言运行时的调用站点可以通过链接器从这些自动发现的运行时链接,如果它们的本机对象被传递到此运行时。 如果未通过调用此方法显式设置类加载器,则将使用调用createLinker()的线程的线程上下文类加载器。 如果使用null显式调用此方法,则将使用ServiceLoader.loadInstalled(Class)来加载链接器。
        参数
        classLoader - 用于自动发现可用链接器的类加载器。
      • setPrioritizedLinkers

        public void setPrioritizedLinkers​(List<? extends GuardingDynamicLinker> prioritizedLinkers)
        设置优先级保护动态链接器。 使用Dynalink的语言运行时通常至少有一个用于自己语言的链接器。 在链接调用站点之前,在任何自动发现和回退链接器之前,将首先由生成的动态链接器查询这些链接器。 如果工厂还自动发现与其中一个优先级链接器匹配的链接器类,则将忽略自动发现的类,并使用显式优先级实例。
        参数
        prioritizedLinkers - 优先连接子列表。 可以为null。
        异常
        NullPointerException - 如果任何列表元素为null。
      • setPrioritizedLinkers

        public void setPrioritizedLinkers​(GuardingDynamicLinker... prioritizedLinkers)
        设置优先级保护动态链接器。 setPrioritizedLinkers(List)Arrays.asList(prioritizedLinkers)相同。
        参数
        prioritizedLinkers - 一组优先连接子。 可以为null。
        异常
        NullPointerException - 如果任何数组元素为null。
      • setFallbackLinkers

        public void setFallbackLinkers​(List<? extends GuardingDynamicLinker> fallbackLinkers)
        设置后备保护动态链接器。 在任何自动发现和优先级链接器之后,当它链接调用站点时,最终将由生成的动态链接器查询这些链接器。 如果工厂还自动发现与其中一个回退链接器匹配的链接器类,则将忽略自动发现的类,并使用显式回退实例。
        参数
        fallbackLinkers - 回退链接器列表。 可以为空以表示调用者希望不设置回退链接器。 请注意,如果未显式调用此方法或将此方法传递为null,则工厂将创建BeansLinker的实例以用作默认回退链接器。
        异常
        NullPointerException - 如果任何列表元素为null。
      • setFallbackLinkers

        public void setFallbackLinkers​(GuardingDynamicLinker... fallbackLinkers)
        设置后备保护动态链接器。 与致电setFallbackLinkers(List)Arrays.asList(fallbackLinkers)相同。
        参数
        fallbackLinkers - 一系列后备链接器。 可以为空以表示调用者希望不设置回退链接器。 请注意,如果未显式调用此方法或将此方法传递为null,则工厂将创建BeansLinker的实例以用作默认回退链接器。
        异常
        NullPointerException - 如果任何数组元素为null。
      • setSyncOnRelink

        public void setSyncOnRelink​(boolean syncOnRelink)
        设置在重新链接调用站点后,此工厂创建的动态链接器是否将调用MutableCallSite.syncAll(MutableCallSite[]) 默认为false。 如果运行时支持动态链接代码的多线程执行,则可能需要将其设置为true。
        参数
        syncOnRelink - 如果在重新链接上调用同步, syncOnRelink true,否则为false。
      • setUnstableRelinkThreshold

        public void setUnstableRelinkThreshold​(int unstableRelinkThreshold)
        设置不稳定重新链接阈值; 呼叫站点重新链接的次数,之后它将被视为不稳定,随后的链接请求将指示此情况。 未明确设置时默认为8。
        参数
        unstableRelinkThreshold - 新阈值。 不得低于零。 值为零意味着呼叫站点永远不会被视为不稳定。
        另请参见:
        LinkRequest.isCallSiteUnstable()
      • setPrelinkTransformer

        public void setPrelinkTransformer​(GuardedInvocationTransformer prelinkTransformer)
        设置预链接变压器。 这是一个GuardedInvocationTransformer ,它将在组件链接器创建并在动态链接器将其链接到调用站点之前获得最后的机会来修改受保护的调用。 它通常用于使调用的返回值类型适应调用站点的类型。 未明确设置时,将使用默认的预链接转换器,只需调用GuardedInvocation.asType(LinkerServices, MethodType) 很少需要定制的预链接变压器; 它们主要用作实现代码去优化策略等高级技术的构建块。
        参数
        prelinkTransformer - 动态链接器的预链接转换器。 可以为null使工厂使用默认变换器。
      • setAutoConversionStrategy

        public void setAutoConversionStrategy​(MethodTypeConversionStrategy autoConversionStrategy)
        设置表示自动类型转换的转换策略的对象。 LinkerServices.asType(MethodHandle, MethodType)将所有自定义转换应用于方法句柄后,它仍然需要生成method invocation conversions ,通常可以根据MethodHandle.asType(MethodType)自动应用。 但是,有时语言运行时甚至需要为自己的呼叫站点自定义这些转换。 一个典型的例子是允许取消归零返回值,这是普通的MethodHandles.asType()默认的。 在这种情况下,语言运行库可以安装自己的自定义自动转换策略,该策略可以处理空值。 请注意,当调用策略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的列表。 这些从不会从调用此方法中抛出,因为它会尽一切努力从它们中恢复并忽略失败的链接器。
        结果
        新的动态链接器