/** * Creates a new {@link RepositoryConfigurationSourceSupport} with the given environment. * * @param environment must not be {@literal null}. * @param classLoader must not be {@literal null}. * @param registry must not be {@literal null}. */ public RepositoryConfigurationSourceSupport(Environment environment, ClassLoader classLoader, BeanDefinitionRegistry registry) { Assert.notNull(environment, "Environment must not be null!"); Assert.notNull(classLoader, "ClassLoader must not be null!"); Assert.notNull(registry, "BeanDefinitionRegistry must not be null!"); this.environment = environment; this.beanNameGenerator = new RepositoryBeanNameGenerator(classLoader); this.registry = registry; }
@Override public String generateBeanName(BeanDefinition beanDefinition) { return beanNameGenerator.generateBeanName(beanDefinition); }
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()); } }
public String generateBeanName(BeanDefinition definition, BeanDefinitionRegistry registry) { AnnotatedBeanDefinition beanDefinition = new AnnotatedGenericBeanDefinition(getRepositoryInterfaceFrom(definition)); return DELEGATE.generateBeanName(beanDefinition, registry); }
/** * Registers a generic repository factory bean for a bean with the given name and the provided configuration context. * * @param parser * @param name * @param context */ private void registerGenericRepositoryFactoryBean( RepositoryConfiguration<XmlRepositoryConfigurationSource> configuration, ParserContext parser) { RepositoryBeanDefinitionBuilder definitionBuilder = new RepositoryBeanDefinitionBuilder(configuration, extension); try { BeanDefinitionBuilder builder = definitionBuilder.build(parser.getRegistry(), parser.getReaderContext() .getResourceLoader()); extension.postProcess(builder, configuration.getConfigurationSource()); AbstractBeanDefinition beanDefinition = builder.getBeanDefinition(); beanDefinition.setSource(configuration.getSource()); RepositoryBeanNameGenerator generator = new RepositoryBeanNameGenerator(); generator.setBeanClassLoader(parser.getReaderContext().getBeanClassLoader()); String beanName = generator.generateBeanName(beanDefinition, parser.getRegistry()); if (LOG.isDebugEnabled()) { LOG.debug("Registering repository: " + beanName + " - Interface: " + configuration.getRepositoryInterface() + " - Factory: " + extension.getRepositoryFactoryClassName()); } BeanComponentDefinition definition = new BeanComponentDefinition(beanDefinition, beanName); parser.registerBeanComponent(definition); } catch (RuntimeException e) { handleError(e, configuration.getConfigurationSource().getElement(), parser.getReaderContext()); } }
/** * Generate a bean name for the given bean definition. * * @param definition the bean definition to generate a name for * @return the generated bean name * @since 2.0 */ public String generateBeanName(BeanDefinition definition) { AnnotatedBeanDefinition beanDefinition = definition instanceof AnnotatedBeanDefinition // ? (AnnotatedBeanDefinition) definition // : new AnnotatedGenericBeanDefinition(getRepositoryInterfaceFrom(definition)); return DELEGATE.generateBeanName(beanDefinition); }