code: public ContextDestroyer initiate() {
          validateScanners(); // Making sure scanners are properly defined.
          final Context context = createContext(); // Creating new instance, applying user's settings.
          final ContextDestroyer contextDestroyer = new ContextDestroyer();
          mapInContext(context, processors); // Now context contains default processors. They are injectable.
          mapInContext(context, manuallyAddedComponents); // Now manually added components are in the context.
          initiateMetaComponents(context, contextDestroyer); // Now context contains custom annotation processors.
          invokeProcessorActionsBeforeInitiation(); // Processors are ready to process!
          initiateRegularComponents(context, contextDestroyer);// Now context contains all regular components.
          invokeProcessorActionsAfterInitiation(context, contextDestroyer); // Processors finish up their work.
          finishContext(context); // Clearing processors and components.
          return contextDestroyer;
      }
docs: This is finalizing method that actually scans and initiates the context. After this method invocation, context
  initialized becomes unusable; if - for some reason - you need to create multiple contexts, use separate
  initializers. Make sure to add some class scanners and scanning roots before invoking this method - otherwise
  there will be no classes to scan for.
  
  @return {@link ContextDestroyer} instance, implementing {@link com.badlogic.gdx.utils.Disposable} interface. On
  {@link ContextDestroyer#dispose()}, this object will invoke registered destruction methods (that might
  include invoking finalizing component methods or disposing of heavy objects). Make sure to dispose of
  this object before closing the application - or as soon as the context is no longer needed.
  @see #scan(Class, ClassScanner)