public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry registry) { Assert.notNull(annotationMetadata, "AnnotationMetadata must not be null!"); Assert.notNull(registry, "BeanDefinitionRegistry must not be null!"); Assert.notNull(resourceLoader, "ResourceLoader must not be null!"); // Guard against calls for sub-classes if (annotationMetadata.getAnnotationAttributes(getAnnotation().getName()) == null) { return; } AnnotationRepositoryConfigurationSource configurationSource = new AnnotationRepositoryConfigurationSource( annotationMetadata, getAnnotation(), resourceLoader, environment, registry); RepositoryConfigurationExtension extension = getExtension(); RepositoryConfigurationUtils.exposeRegistration(extension, registry, configurationSource); RepositoryConfigurationDelegate delegate = new RepositoryConfigurationDelegate(configurationSource, resourceLoader, environment); delegate.registerRepositoriesIn(registry, extension); }
/** * Workaround the lack of injectability of external resources into {@link ImportBeanDefinitionRegistrar}s in the * Spring 3.1 timeline. We populate {@link #beanClassLoader} and default the {@link #resourceLoader} in case they * haven't been set until a call to this method. * * @param registry must not be {@literal null}. * @see SPR-9568 */ private void defaultExternalResources(BeanDefinitionRegistry registry) { if (beanClassLoader == null) { this.beanClassLoader = getBeanClassLoader(registry); } if (resourceLoader == null) { this.resourceLoader = new DefaultResourceLoader(this.beanClassLoader); } }
public void registerBeanDefinitions(AnnotationMetadata annotationMetadata, BeanDefinitionRegistry registry) { Assert.notNull(annotationMetadata); Assert.notNull(registry); // Guard against calls for sub-classes if (annotationMetadata.getAnnotationAttributes(getAnnotation().getName()) == null) { return; } defaultExternalResources(registry); AnnotationRepositoryConfigurationSource configuration = new AnnotationRepositoryConfigurationSource( annotationMetadata, getAnnotation()); RepositoryConfigurationExtension extension = getExtension(); extension.registerBeansForRoot(registry, configuration); RepositoryBeanNameGenerator generator = new RepositoryBeanNameGenerator(); generator.setBeanClassLoader(beanClassLoader); for (RepositoryConfiguration<AnnotationRepositoryConfigurationSource> repositoryConfiguration : extension .getRepositoryConfigurations(configuration, resourceLoader)) { RepositoryBeanDefinitionBuilder builder = new RepositoryBeanDefinitionBuilder(repositoryConfiguration, extension); BeanDefinitionBuilder definitionBuilder = builder.build(registry, resourceLoader); extension.postProcess(definitionBuilder, configuration); String beanName = generator.generateBeanName(definitionBuilder.getBeanDefinition(), registry); registry.registerBeanDefinition(beanName, definitionBuilder.getBeanDefinition()); } }