# Class InetAddressResolverProvider

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

public abstract class InetAddressResolverProvider extends Object
Service-provider class for InetAddress resolvers.

A resolver provider is a factory for custom implementations of InetAddress resolvers. A resolver defines operations for looking up (resolving) host names and IP addresses.

A resolver provider is a concrete subclass of this class that has a zero-argument constructor and implements the abstract methods specified below.

A given invocation of the Java virtual machine maintains a single system-wide resolver instance, which is used by InetAddress. It is set after the VM is fully initialized and when an invocation of a method in `InetAddress` class triggers the first lookup operation.

A resolver provider is located and loaded by `InetAddress` to create the system-wide resolver as follows:

1. The `ServiceLoader` mechanism is used to locate an `InetAddressResolverProvider` using the system class loader. The order in which providers are located is implementation specific. The first provider found will be used to instantiate the `InetAddressResolver` by invoking the `get(InetAddressResolverProvider.Configuration)` method. The returned `InetAddressResolver` will be set as the system-wide resolver.
2. If the previous step fails to find any resolver provider the built-in resolver will be set as the system-wide resolver.

If instantiating a custom resolver from a provider discovered in step 1 throws an error or exception, the system-wide resolver will not be set and the error or exception will be propagated to the caller of the method that triggered the lookup operation. Otherwise, any lookup operation will be performed using the system-wide resolver.

Implementation Note:
  `InetAddress` will use the built-in resolver for any lookup operation that might occur before the VM is fully booted.
Since:
  18

## Nested Class Summary

Nested Classes
Modifier and Type
Class
Description
`static interface`
`InetAddressResolverProvider.Configuration`
A `Configuration` object is supplied to the `get(Configuration)` method when setting the system-wide resolver.

## Constructor Summary

Constructors
Modifier
Constructor
Description
`protected`
`InetAddressResolverProvider()`
Creates a new instance of `InetAddressResolverProvider`.

## Method Summary

Modifier and Type
Method
Description
`abstract InetAddressResolver`
`get(InetAddressResolverProvider.Configuration configuration)`
Initialize and return an `InetAddressResolver` provided by this provider.
`abstract String`
`name()`
Returns the name of this provider, or `null` if unnamed.

### Methods declared in class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
Modifier and Type
Method
Description
`protected Object`
`clone()`
Creates and returns a copy of this object.
`boolean`
`equals(Object obj)`
Indicates whether some other object is "equal to" this one.
`protected void`
`finalize()`
Deprecated, for removal: This API element is subject to removal in a future version.
Finalization is deprecated and subject to removal in a future release.
`final Class<?>`
`getClass()`
Returns the runtime class of this `Object`.
`int`
`hashCode()`
Returns a hash code value for this object.
`final void`
`notify()`
Wakes up a single thread that is waiting on this object's monitor.
`final void`
`notifyAll()`
Wakes up all threads that are waiting on this object's monitor.
`String`
`toString()`
Returns a string representation of the object.
`final void`
`wait()`
Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
`final void`
`wait(long timeoutMillis)`
Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
`final void`
`wait(long timeoutMillis, int nanos)`
Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

## Constructor Details

### InetAddressResolverProvider

protected InetAddressResolverProvider()
Creates a new instance of `InetAddressResolverProvider`.

Implementation Note:
  It is recommended that an `InetAddressResolverProvider` service implementation initialization should be as simple as possible, in order to avoid possible risks of deadlock or class loading cycles during the instantiation of the service provider.

## Method Details

### get

public abstract InetAddressResolver get(InetAddressResolverProvider.Configuration configuration)
Initialize and return an `InetAddressResolver` provided by this provider. This method is called by `InetAddress` when installing the system-wide resolver implementation.

Any error or exception thrown by this method is considered as a failure of `InetAddressResolver` instantiation and will be propagated to the caller of the method that triggered the lookup operation.

Parameters:
  `configuration` - a `InetAddressResolverProvider.Configuration` instance containing platform built-in address resolution configuration.
Returns:
  the resolver provided by this provider

### name

public abstract String name()
Returns the name of this provider, or `null` if unnamed.

Returns:
  the name of this provider, or `null` if unnamed