Individual modules are interconnected using the Dependency Injection design pattern. The Google Guice library is used for this. The practical consequence is that it is easier to create separate tests of individual modules that are embedded in the test environment.
The Google Guice library has very good documentation, so we will only mention the necessary minimum here.

.bind(Main.class).to(MainImpl.class)
If a specific procedure is to be used to create an instance, the module can implement that procedure with a method annotated with the @Provides annotation.