/** Register the {@link Configuration} class itself as a bean definition. */
  private void doLoadBeanDefinitionForConfigurationClassIfNecessary(
      ConfigurationClass configClass) {
    if (configClass.getBeanName() != null) {
      // a bean definition already exists for this configuration class -> nothing to do
      return;
    }

    // no bean definition exists yet -> this must be an imported configuration class (@Import).
    BeanDefinition configBeanDef = new GenericBeanDefinition();
    String className = configClass.getMetadata().getClassName();
    configBeanDef.setBeanClassName(className);
    if (checkConfigurationClassCandidate(configBeanDef, this.metadataReaderFactory)) {
      String configBeanName =
          BeanDefinitionReaderUtils.registerWithGeneratedName(configBeanDef, this.registry);
      configClass.setBeanName(configBeanName);
      if (logger.isDebugEnabled()) {
        logger.debug(
            String.format(
                "Registered bean definition for imported @Configuration class %s", configBeanName));
      }
    } else {
      try {
        MetadataReader reader = this.metadataReaderFactory.getMetadataReader(className);
        AnnotationMetadata metadata = reader.getAnnotationMetadata();
        this.problemReporter.error(
            new InvalidConfigurationImportProblem(className, reader.getResource(), metadata));
      } catch (IOException ex) {
        throw new IllegalStateException("Could not create MetadataReader for class " + className);
      }
    }
  }
  /*
   * JD: Overriding manually and playing with bean definitions. We do this
   * because we have not ported all the mock test data to a 2.x style configuration
   * directory, so we need to force the legacy data directory loader to engage.
   */
  protected void loadBeanDefinitions(XmlBeanDefinitionReader reader)
      throws BeansException, IOException {
    super.loadBeanDefinitions(reader);

    if (useLegacyGeoServerLoader) {
      BeanDefinition def = reader.getBeanFactory().getBeanDefinition("geoServerLoader");
      def.setBeanClassName("org.geoserver.test.TestGeoServerLoaderProxy");
    }
  }
 @Override
 public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
     throws BeansException {
   String[] names = beanFactory.getBeanDefinitionNames();
   for (String name : names) {
     BeanDefinition beanDefinition = beanFactory.getBeanDefinition(name);
     String beanClassName = beanDefinition.getBeanClassName();
     try {
       Class<?> beanClass = Class.forName(beanClassName);
       DeprecatedClass annotation = beanClass.getAnnotation(DeprecatedClass.class);
       if (annotation != null) {
         beanDefinition.setBeanClassName(annotation.newImpl().getName());
       }
     } catch (ClassNotFoundException e) {
       e.printStackTrace();
     }
   }
 }