public AbstractServerListFilter<T> getFilterImpl(IClientConfig niwsClientConfig) throws ClientException {
        String niwsServerListFilterClassName = null;
        try {
            niwsServerListFilterClassName = niwsClientConfig.get(
                            CommonClientConfigKey.NIWSServerListFilterClassName,
                            ZoneAffinityServerListFilter.class.getName());

            AbstractServerListFilter<T> abstractNIWSServerListFilter = 
                    (AbstractServerListFilter<T>) ClientFactory.instantiateInstanceWithClientConfig(niwsServerListFilterClassName, niwsClientConfig);
            return abstractNIWSServerListFilter;
        } catch (Throwable e) {
            throw new ClientException(
                    ClientException.ErrorType.CONFIGURATION,
                    "Unable to get an instance of CommonClientConfigKey.NIWSServerListFilterClassName. Configured class:"
                            + niwsServerListFilterClassName, e);
        }
    }
Get a ServerListFilter instance. It uses {@link ClientFactory#instantiateInstanceWithClientConfig(String, IClientConfig)}
which in turn uses reflection to initialize the filter instance. 
The filter class name is determined by the value of {@link CommonClientConfigKey#NIWSServerListFilterClassName}
in the {@link IClientConfig}. The default implementation is {@link ZoneAffinityServerListFilter}.
ribbon-loadbalancer/src/main/java/com/netflix/loadbalancer/AbstractServerList.java