code: @Override
      public Set<BeanDefinitionHolder> doScan(String... basePackages) {
          Set<BeanDefinitionHolder> beanDefinitions = super.doScan(basePackages);
  
          if (beanDefinitions.isEmpty()) {
              log.warn("No WestCacheable was found in '{}' package. " +
                              "Please check your configuration.",
                      Arrays.toString(basePackages));
              return beanDefinitions;
          }
  
          for (val holder : beanDefinitions) {
              val definition = (GenericBeanDefinition) holder.getBeanDefinition();
              log.debug("Creating WestCacheableFactoryBean with name '{}' and '{}'",
                      holder.getBeanName(), definition.getBeanClassName());
  
              // the mapper interface is the original class of the bean
              // but, the actual class of the bean is MapperFactoryBean
              definition.getPropertyValues().add("xyzInterface", definition.getBeanClassName());
              definition.setBeanClass(WestCacheableFactoryBean.class);
          }
  
          return beanDefinitions;
      }
docs: Calls the parent search that will search and register all the candidates.
  Then the registered objects are post processed to set them as
  MapperFactoryBeans