/**
   * "Copy-constructor", used by sub-classes when creating actual non-blueprint instances to use.
   *
   * @param src Blueprint object used as the baseline for this instance
   */
  protected SerializerProvider(
      SerializerProvider src, SerializationConfig config, SerializerFactory f) {
    if (config == null) {
      throw new NullPointerException();
    }
    _serializerFactory = f;
    _config = config;

    _serializerCache = src._serializerCache;
    _unknownTypeSerializer = src._unknownTypeSerializer;
    _keySerializer = src._keySerializer;
    _nullValueSerializer = src._nullValueSerializer;
    _nullKeySerializer = src._nullKeySerializer;

    _stdNullValueSerializer = (_nullValueSerializer == DEFAULT_NULL_KEY_SERIALIZER);

    _serializationView = config.getActiveView();
    _attributes = config.getAttributes();

    /* Non-blueprint instances do have a read-only map; one that doesn't
     * need synchronization for lookups.
     */
    _knownSerializers = _serializerCache.getReadOnlyLookupMap();
  }