public BeanDefinition parse(Element element, ParserContext parser) { try { XmlRepositoryConfigurationSource configSource = new XmlRepositoryConfigurationSource(element, parser); for (RepositoryConfiguration<XmlRepositoryConfigurationSource> config : extension.getRepositoryConfigurations( configSource, parser.getReaderContext().getResourceLoader())) { registerGenericRepositoryFactoryBean(config, parser); } extension.registerBeansForRoot(parser.getRegistry(), configSource); } catch (RuntimeException e) { handleError(e, element, parser.getReaderContext()); } return null; }
@Nullable public BeanDefinition parse(Element element, ParserContext parser) { XmlReaderContext readerContext = parser.getReaderContext(); try { ResourceLoader resourceLoader = ConfigurationUtils.getRequiredResourceLoader(readerContext); Environment environment = readerContext.getEnvironment(); BeanDefinitionRegistry registry = parser.getRegistry(); XmlRepositoryConfigurationSource configSource = new XmlRepositoryConfigurationSource(element, parser, environment); RepositoryConfigurationDelegate delegate = new RepositoryConfigurationDelegate(configSource, resourceLoader, environment); RepositoryConfigurationUtils.exposeRegistration(extension, registry, configSource); for (BeanComponentDefinition definition : delegate.registerRepositoriesIn(registry, extension)) { readerContext.fireComponentRegistered(definition); } } catch (RuntimeException e) { handleError(e, element, readerContext); } return null; }
/** * 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()); } }