content: package com.ctrip.framework.apollo.spring.annotation;
  
  import com.ctrip.framework.apollo.spring.property.SpringValueDefinitionProcessor;
  import org.springframework.beans.factory.support.BeanDefinitionRegistry;
  import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
  import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
  import org.springframework.core.annotation.AnnotationAttributes;
  import org.springframework.core.type.AnnotationMetadata;
  
  import com.ctrip.framework.apollo.spring.config.PropertySourcesProcessor;
  import com.ctrip.framework.apollo.spring.util.BeanRegistrationUtil;
  import com.google.common.collect.Lists;
  
  /**
   * @author Jason Song(song_s@ctrip.com)
   */
  public class ApolloConfigRegistrar implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
      AnnotationAttributes attributes = AnnotationAttributes.fromMap(importingClassMetadata
          .getAnnotationAttributes(EnableApolloConfig.class.getName()));
      String[] namespaces = attributes.getStringArray("value");
      int order = attributes.getNumber("order");
      PropertySourcesProcessor.addNamespaces(Lists.newArrayList(namespaces), order);
  
      BeanRegistrationUtil.registerBeanDefinitionIfNotExists(registry, PropertySourcesPlaceholderConfigurer.class.getName(),
          PropertySourcesPlaceholderConfigurer.class);
  
      BeanRegistrationUtil.registerBeanDefinitionIfNotExists(registry, PropertySourcesProcessor.class.getName(),
          PropertySourcesProcessor.class);
  
      BeanRegistrationUtil.registerBeanDefinitionIfNotExists(registry, ApolloAnnotationProcessor.class.getName(),
          ApolloAnnotationProcessor.class);
  
      BeanRegistrationUtil.registerBeanDefinitionIfNotExists(registry, SpringValueProcessor.class.getName(), SpringValueProcessor.class);
      BeanRegistrationUtil.registerBeanDefinitionIfNotExists(registry, SpringValueDefinitionProcessor.class.getName(), SpringValueDefinitionProcessor.class);
    }
  }
  