code: protected String mergeDefinition(BeanDefinition target, ReconfigBeanDefinitionHolder source) {
      if (null == target.getBeanClassName()) {
        logger.warn("ingore bean definition {} for without class", source.getBeanName());
        return null;
      }
      // 当类型变化后,删除原有配置
      if (null != source.getBeanDefinition().getBeanClassName()
          && !source.getBeanDefinition().getBeanClassName().equals(target.getBeanClassName())) {
        target.setBeanClassName(source.getBeanDefinition().getBeanClassName());
        for (PropertyValue pv : target.getPropertyValues().getPropertyValues()) {
          target.getPropertyValues().removePropertyValue(pv);
        }
        target.getConstructorArgumentValues().clear();
      }
      MutablePropertyValues pvs = source.getBeanDefinition().getPropertyValues();
      for (PropertyValue pv : pvs.getPropertyValueList()) {
        String name = pv.getName();
        target.getPropertyValues().addPropertyValue(name, pv.getValue());
        logger.debug("config {}.{} = {}", new Object[] { source.getBeanName(), name, pv.getValue() });
      }
      logger.debug("Reconfig bean {} ", source.getBeanName());
      return source.getBeanName();
    }
docs: 合并bean定义
  
  @param target a {@link org.springframework.beans.factory.config.BeanDefinition} object.
  @param source a
  {@link org.beangle.inject.spring.config.context.spring.ReconfigBeanDefinitionHolder}
  object.
  @return a {@link java.lang.String} object.