docs: @Override
      public void registerBeanDefinition(String beanName, BeanDefinition beanDefinition) throws BeanDefinitionStoreException {
          boolean canOverride = defaultOverriding;
          BeanDefinition oldBeanDefinition = containsBeanDefinition(beanName) ? getBeanDefinition(beanName) : null;
          String override = oldBeanDefinition == null ? null : getAttribute(beanDefinition, CAN_OVERRIDE_ATTR);
          String isfinal = oldBeanDefinition == null ? null : getAttribute(oldBeanDefinition, IS_FINAL_ATTR);
          
          if (override != null) {
              switch (BeanOverride.valueOf(override.toUpperCase())) {
                  case ALWAYS:
                      canOverride = true;
                      break;
                  
                  case NEVER:
                      canOverride = false;
                      break;
                  
                  case IGNORE:
                      return;
  
                  case DEFAULT:
                      break;
              }
          }
          
          if (canOverride && "true".equalsIgnoreCase(isfinal)) {
              canOverride = false;
          }
          
          super.setAllowBeanDefinitionOverriding(canOverride);
          super.registerBeanDefinition(beanName, beanDefinition);
      }