Module java.base
Package java.net.spi

Class InetAddressResolverProvider

java.lang.Object
java.net.spi.InetAddressResolverProvider

public abstract class InetAddressResolverProvider extends Object
InetAddress解析器的服务提供程序类。

解析器提供程序是InetAddress解析器的自定义实现的工厂。解析器定义了查找(解析)主机名和IP地址的操作。

解析器提供程序是这个类的具体子类,具有零参数构造函数,并实现下面指定的抽象方法。

Java虚拟机的每次调用维护一个单一的系统范围解析器实例,该实例由InetAddress使用。它在VM完全初始化后设置,并且当InetAddress类中的方法调用引发第一次查找操作时使用。

解析器提供程序通过以下方式被InetAddress定位和加载以创建系统范围解析器:

  1. 使用ServiceLoader机制使用系统类加载器定位InetAddressResolverProvider。定位提供程序的顺序是特定于实现的。找到的第一个提供程序将用于通过调用get(InetAddressResolverProvider.Configuration)方法实例化InetAddressResolver。返回的InetAddressResolver将被设置为系统范围解析器。
  2. 如果前一步未找到任何解析器提供程序,则将内置解析器设置为系统范围解析器。

如果从步骤1中发现的提供程序实例化自定义解析器时抛出错误或异常,则不会设置系统范围解析器,并且错误或异常将传播到触发查找操作的方法的调用者。否则,任何查找操作将使用系统范围解析器

实现注意事项:
InetAddress将在VM完全启动之前发生的任何查找操作使用内置解析器
自Java版本:
18
  • Constructor Details

    • InetAddressResolverProvider

      protected InetAddressResolverProvider()
      创建一个新的InetAddressResolverProvider实例。
      实现注意事项:
      建议InetAddressResolverProvider服务实现初始化尽可能简单,以避免在实例化服务提供程序期间发生死锁或类加载循环的可能风险。
      抛出:
      SecurityException - 如果存在安全管理器并且其checkPermission方法不允许RuntimePermission("inetAddressResolverProvider")
  • Method Details

    • get

      public abstract InetAddressResolver get(InetAddressResolverProvider.Configuration configuration)
      初始化并返回此提供程序提供的InetAddressResolver。此方法由InetAddress安装系统范围解析器实现时调用。

      此方法抛出的任何错误或异常都被视为InetAddressResolver实例化失败,并将传播到触发查找操作的方法的调用者。

      参数:
      configuration - 包含平台内置地址解析配置的InetAddressResolverProvider.Configuration实例。
      返回:
      此提供程序提供的解析器
    • name

      public abstract String name()
      返回此提供程序的名称,如果未命名则返回null
      返回:
      此提供程序的名称,如果未命名则返回null