From part 4, we known that all of the request is handled by ArgoDispatcher.
Group & Project Module
In default, ArgoDispatcher only contains the ArgoModule. But if you defined group Module, or project Module, they are included in too.
The group here in groupConvention means group like com.bj58,and the project here means project like HelloWorld.
Group Convention
You can customize the convention class implementation in:
ArgoDipatcherFactory used annotatedGroupConventionBinder to create a GroupConvention instance. The default is a one that does not exist, and returns DefaultGroupConvention class instance.
DefaultGroupConvention is annotated with @GroupConventionAnnotation.
This annotations defines the config folder, log folder, the convention that controllers should meet.
The project Convention is similar, which returns a anonymous inner class:
As we expected, Group is in a higher level compared with Project.
The DefaultGroupConvention implements interface GroupConvention, overrides group() which returns the member groupConfig,and overrides currentProject() which returns the member projectConfig.
Group & Project Config
Followed by parseProjectConfig()
Inject
The information obtained above is used in Argo.init().
Guice build the Injector, and used the configuration in groupModule, projectModule, controller Module to Inject.
Conclusion
GroupConventionFactory used the GroupConvention.annotatedGroupConventionBinder class, and the annotation @GroupConventionAnnotation on it to get the config folder, log folder, patterns that controllers should follow.
Of course, the default projectModule is a anonymous ProjectConvection, and the default groupModule is NullModule, they both do nothing in configure(), where you can call bind() here to do injection.