docs: @Override
      public synchronized BeanContext start() {
          if (!isRunning()) {
  
              if (initializing.compareAndSet(false, true)) {
                  if (LOG.isDebugEnabled()) {
                      LOG.debug("Starting BeanContext");
                  }
                  readAllBeanConfigurations();
                  readAllBeanDefinitionClasses();
                  if (LOG.isDebugEnabled()) {
                      String activeConfigurations = beanConfigurations
                              .values()
                              .stream()
                              .filter(config -> config.isEnabled(this))
                              .map(BeanConfiguration::getName)
                              .collect(Collectors.joining(","));
                      if (StringUtils.isNotEmpty(activeConfigurations)) {
                          LOG.debug("Loaded active configurations: {}", activeConfigurations);
                      }
                  }
                  if (LOG.isDebugEnabled()) {
                      LOG.debug("BeanContext Started.");
                  }
                  publishEvent(new StartupEvent(this));
              }
              // start thread for parallel beans
              processParallelBeans();
              running.set(true);
              initializing.set(false);
          }
          return this;
      }