### Question:
JacksonHandlerInstantiator extends HandlerInstantiator { @Override public VirtualPropertiesWriter virtualPropertyWriterInstance(MapperConfig<?> config, Class<?> implClass) { if (instance == null) { instance = new VirtualPropertiesWriter( virtualProperties, valueResolver, virtualPropertyFilters); } return instance; } JacksonHandlerInstantiator(VirtualProperty[] virtualProperties, ValueResolver valueResolver);  JacksonHandlerInstantiator(
            VirtualProperty[] virtualProperties,
            ValueResolver valueResolver,
            VirtualPropertyFilter[] virtualPropertyFilters
    ); @Override JsonDeserializer<?> deserializerInstance(DeserializationConfig config, Annotated annotated, Class<?> deserClass); @Override KeyDeserializer keyDeserializerInstance(DeserializationConfig config, Annotated annotated, Class<?> keyDeserClass); @Override JsonSerializer<?> serializerInstance(SerializationConfig config, Annotated annotated, Class<?> serClass); @Override TypeResolverBuilder<?> typeResolverBuilderInstance(MapperConfig<?> config, Annotated annotated, Class<?> builderClass); @Override TypeIdResolver typeIdResolverInstance(MapperConfig<?> config, Annotated annotated, Class<?> resolverClass); @Override VirtualPropertiesWriter virtualPropertyWriterInstance(MapperConfig<?> config, Class<?> implClass);  }### Answer:
@Test public void virtualPropertyWriterInstanceReturnsSingleton() { VirtualProperty[] customProperties = new VirtualProperty[0]; Log4j2Lookup valueResolver = new Log4j2Lookup(null); JacksonHandlerInstantiator handlerInstantiator = createTestHandlerInstantiator(customProperties, valueResolver); MapperConfig config = new ObjectMapper().getSerializationConfig(); VirtualBeanPropertyWriter result1 = handlerInstantiator.virtualPropertyWriterInstance( config, VirtualPropertiesWriter.class ); VirtualBeanPropertyWriter result2 = handlerInstantiator.virtualPropertyWriterInstance( config, VirtualPropertiesWriter.class ); Assert.assertTrue(result1 == result2); }