@Override
    protected Injector getInjector() {
        return guiceInjector.updateAndGet((current) -> {

            // Use existing injector if already created
            if (current != null)
                return current;

            // Create new injector if necessary
            Injector injector =

                    // Ensure environment and logging are configured FIRST ...
                    Guice.createInjector(Stage.PRODUCTION,
                        new EnvironmentModule(environment),
                        new LogModule(environment)
                    )

                    // ... before attempting configuration of any other modules
                    // (logging within the constructors of other modules may
                    // otherwise default to including messages from the "debug"
                    // level, regardless of how the application log level is
                    // actually configured)
                    .createChildInjector(
                        new ExtensionModule(environment),
                        new RESTServiceModule(sessionMap),
                        new TunnelModule()
                    );

            return injector;

        });
    }
Internal reference to the Guice injector that was lazily created when
getInjector() was first invoked.
guacamole/src/main/java/org/apache/guacamole/GuacamoleServletContextListener.java