content: package com.ctrip.framework.apollo.spring.util;
  
  import java.util.Objects;
  
  import org.springframework.beans.factory.config.BeanDefinition;
  import org.springframework.beans.factory.support.BeanDefinitionBuilder;
  import org.springframework.beans.factory.support.BeanDefinitionRegistry;
  
  /**
   * @author Jason Song(song_s@ctrip.com)
   */
  public class BeanRegistrationUtil {
    public static boolean registerBeanDefinitionIfNotExists(BeanDefinitionRegistry registry, String beanName,
                                                            Class<?> beanClass) {
      if (registry.containsBeanDefinition(beanName)) {
        return false;
      }
  
      String[] candidates = registry.getBeanDefinitionNames();
  
      for (String candidate : candidates) {
        BeanDefinition beanDefinition = registry.getBeanDefinition(candidate);
        if (Objects.equals(beanDefinition.getBeanClassName(), beanClass.getName())) {
          return false;
        }
      }
  
      BeanDefinition annotationProcessor = BeanDefinitionBuilder.genericBeanDefinition(beanClass).getBeanDefinition();
      registry.registerBeanDefinition(beanName, annotationProcessor);
  
      return true;
    }
  }
  