Getter getGetter(Object targetObject, String attributeName, boolean failOnMissingReflectiveAttribute) {
        Getter getter = getterCache.getGetter(targetObject.getClass(), attributeName);
        if (getter == null) {
            getter = instantiateGetter(targetObject, attributeName, failOnMissingReflectiveAttribute);
            if (getter.isCacheable()) {
                getterCache.putGetter(targetObject.getClass(), attributeName, getter);
            }
        }
        return getter;
    }
@Test
    public void when_getGetterByReflection_then_getterInCache() {
        // GIVEN
        Extractors extractors = createExtractors(null);

        // WHEN
        Getter getterFirstInvocation = extractors.getGetter(bond, "car.power", true);
        Getter getterSecondInvocation = extractors.getGetter(bond, "car.power", true);

        // THEN
        assertThat(getterFirstInvocation)
                .isInstanceOf(FieldGetter.class)
                .isSameAs(getterSecondInvocation);
    }