docs: protected void processProperties(ConfigurableListableBeanFactory beanFactoryToProcess, Properties props)
              throws BeansException {
  
          BeanDefinitionVisitor visitor =
                  new ReloadingPropertyPlaceholderConfigurer.PlaceholderResolvingBeanDefinitionVisitor(props);
          String[] beanNames = beanFactoryToProcess.getBeanDefinitionNames();
          for (int i = 0; i < beanNames.length; i++) {
              // Check that we're not parsing our own bean definition,
              // to avoid failing on unresolvable placeholders in net.unicon.iamlabs.spring.properties.example.net
              // .unicon.iamlabs.spring.properties file locations.
              if (!(beanNames[i].equals(this.beanName) && beanFactoryToProcess.equals(this.beanFactory))) {
                  this.currentBeanName = beanNames[i];
                  try {
                      BeanDefinition bd = beanFactoryToProcess.getBeanDefinition(beanNames[i]);
                      try {
                          visitor.visitBeanDefinition(bd);
                      } catch (BeanDefinitionStoreException ex) {
                          throw new BeanDefinitionStoreException(bd.getResourceDescription(), beanNames[i],
                                  ex.getMessage());
                      }
                  } finally {
                      currentBeanName = null;
                  }
              }
          }
  
          StringValueResolver stringValueResolver = new PlaceholderResolvingStringValueResolver(props);
  
          // New in Spring 2.5: resolve placeholders in alias target names and aliases as well.
          beanFactoryToProcess.resolveAliases(stringValueResolver);
  
          // New in Spring 3.0: resolve placeholders in embedded values such as annotation attributes.
          beanFactoryToProcess.addEmbeddedValueResolver(stringValueResolver);
      }