docs: private void bootstrap(String cacheName, AdvancedCache<?, ?> cache, Configuration configuration,
                            GlobalComponentRegistry globalComponentRegistry, StreamingMarshaller globalMarshaller) {
        this.configuration = configuration;
  
        // injection bootstrap stuff
        componentRegistry = new ComponentRegistry(cacheName, configuration, cache, globalComponentRegistry, globalComponentRegistry.getClassLoader());
  
        EncoderRegistry encoderRegistry = globalComponentRegistry.getComponent(EncoderRegistry.class);
  
        // Wraps the compatibility marshaller so that it can be used as a transcoder
        if (configuration.compatibility().enabled() && configuration.compatibility().marshaller() != null) {
           Marshaller marshaller = configuration.compatibility().marshaller();
           componentRegistry.wireDependencies(marshaller);
           if (!encoderRegistry.isConversionSupported(MediaType.APPLICATION_OBJECT, marshaller.mediaType())) {
              encoderRegistry.registerTranscoder(new TranscoderMarshallerAdapter(marshaller));
           }
        }
  
        // Wraps the GlobalMarshaller so that it can be used as a transcoder
        encoderRegistry.registerTranscoder(new TranscoderMarshallerAdapter(globalMarshaller));
  
        /*
           --------------------------------------------------------------------------------------------------------------
           This is where the bootstrap really happens.  Registering the cache in the component registry will cause
           the component registry to look at the cache's @Inject methods, and construct various components and their
           dependencies, in turn.
           --------------------------------------------------------------------------------------------------------------
         */
        basicComponentRegistry = componentRegistry.getComponent(BasicComponentRegistry.class);
        basicComponentRegistry.registerAlias(Cache.class.getName(), AdvancedCache.class.getName(), AdvancedCache.class);
        basicComponentRegistry.registerComponent(AdvancedCache.class.getName(), cache, false);
  
        componentRegistry.registerComponent(new CacheJmxRegistration(), CacheJmxRegistration.class.getName(), true);
        if (configuration.transaction().recovery().enabled()) {
           componentRegistry.registerComponent(new RecoveryAdminOperations(), RecoveryAdminOperations.class.getName(), true);
        }
        if (configuration.sites().hasEnabledBackups()) {
           componentRegistry.registerComponent(new XSiteAdminOperations(), XSiteAdminOperations.class.getName(), true);
        }
        // The RollingUpgradeManager should always be added so it is registered in JMX.
        componentRegistry.registerComponent(new RollingUpgradeManager(), RollingUpgradeManager.class.getName(), true);
     }