/** 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(); } } }