Exemplo n.º 1
0
 @Override
 protected void loadBeanDefinitions(UpdateableListableBeanFactory beanFactory)
     throws IOException, BeansException {
   AbstractBeanDefinitionReader beanDefinitionReader = new XmlBeanDefinitionReader(beanFactory);
   for (Resource resource : getConfigResources()) {
     if (resource instanceof MongoDbResource) {
       ((MongoDbResource) resource).loadBeanDefinitions(beanFactory);
     } else {
       beanDefinitionReader.loadBeanDefinitions(resource);
     }
   }
 }
  private void loadBeanDefinitionsFromImportedResources(Map<String, Class<?>> importedResources) {
    Map<Class<?>, BeanDefinitionReader> readerInstanceCache =
        new HashMap<Class<?>, BeanDefinitionReader>();
    for (Map.Entry<String, Class<?>> entry : importedResources.entrySet()) {
      String resource = entry.getKey();
      Class<?> readerClass = entry.getValue();
      if (!readerInstanceCache.containsKey(readerClass)) {
        try {
          // Instantiate the specified BeanDefinitionReader
          BeanDefinitionReader readerInstance =
              (BeanDefinitionReader)
                  readerClass
                      .getConstructor(BeanDefinitionRegistry.class)
                      .newInstance(this.registry);

          // Delegate the current ResourceLoader to it if possible
          if (readerInstance instanceof AbstractBeanDefinitionReader) {
            ((AbstractBeanDefinitionReader) readerInstance).setResourceLoader(this.resourceLoader);
          }

          readerInstanceCache.put(readerClass, readerInstance);
        } catch (Exception ex) {
          throw new IllegalStateException(
              "Could not instantiate BeanDefinitionReader class [" + readerClass.getName() + "]");
        }
      }
      BeanDefinitionReader reader = readerInstanceCache.get(readerClass);
      // TODO SPR-6310: qualify relatively pathed locations as done in
      // AbstractContextLoader.modifyLocations
      reader.loadBeanDefinitions(resource);
    }
  }
  private void loadBeanDefinitionsFromImportedResources(
      Map<String, Class<? extends BeanDefinitionReader>> importedResources) {

    Map<Class<?>, BeanDefinitionReader> readerInstanceCache =
        new HashMap<Class<?>, BeanDefinitionReader>();

    for (Map.Entry<String, Class<? extends BeanDefinitionReader>> entry :
        importedResources.entrySet()) {
      String resource = entry.getKey();
      Class<? extends BeanDefinitionReader> readerClass = entry.getValue();

      // Default reader selection necessary?
      if (BeanDefinitionReader.class == readerClass) {
        if (StringUtils.endsWithIgnoreCase(resource, ".groovy")) {
          // When clearly asking for Groovy, that's what they'll get...
          readerClass = GroovyBeanDefinitionReader.class;
        } else {
          // Primarily ".xml" files but for any other extension as well
          readerClass = XmlBeanDefinitionReader.class;
        }
      }

      BeanDefinitionReader reader = readerInstanceCache.get(readerClass);
      if (reader == null) {
        try {
          // Instantiate the specified BeanDefinitionReader
          reader =
              readerClass.getConstructor(BeanDefinitionRegistry.class).newInstance(this.registry);
          // Delegate the current ResourceLoader to it if possible
          if (reader instanceof AbstractBeanDefinitionReader) {
            AbstractBeanDefinitionReader abdr = ((AbstractBeanDefinitionReader) reader);
            abdr.setResourceLoader(this.resourceLoader);
            abdr.setEnvironment(this.environment);
          }
          readerInstanceCache.put(readerClass, reader);
        } catch (Exception ex) {
          throw new IllegalStateException(
              "Could not instantiate BeanDefinitionReader class [" + readerClass.getName() + "]");
        }
      }

      // TODO SPR-6310: qualify relative path locations as done in
      // AbstractContextLoader.modifyLocations
      reader.loadBeanDefinitions(resource);
    }
  }