Guice Automatic Injection – Binding Listeners, Parallel Scanning,…

Veröffentlicht: September 7, 2010 in Automatic Binding for Guice, Java
Schlagworte: , , , , , ,

On Monday I released my “Automatic Injection for Guice“, which should help to automatically create Bean bindings and install Guice Modules.
This is done, due using Implementations of Classpath Scanners. At the moment there is my own pure Implementation, which uses ASM to inspect the classes. You can also choose between the Reflections-API or a Guice Extensions which was created by Sonatype.

Reflections has the biggest advantage at the moment, because it scans the classpath in parallel if you have multiple Cores/CPUs. One Problem I figured out is, that the Binder of Guice is not threadsafe. So if you are want to use it in parallel, make sure that you synchronize it.

In the last stage, my extension added the GuiceModule- and AutoBind-Feature by default. Due the fact, that this can have bad behaviors you can now overwrite it. The “bad” behaviors can result of multiple bindings. If you for example have an automatic installed Guice-Module which binds your class and if the class is annotated with @AutoBind, which would lead to another binding.

The default StartupModule still uses both Features. Create it like that:

StartupModule.create(VirtualClasspathReader.class, "de.devsurf", "net.java.dev.webdav.jaxrs")

StartupModule is an abstract Class, which should be used, if you want to overwrite the used Features. It therefore declares an abstract method “bindAnnotationListeners”.
To bind multiple Implementations we are using the Multibindings Extension for Guice.

So if you only want the automatic Module installation, just bind the GuiceModuleListener:

public class ExampleStartupModule extends StartupModule {
    public ExampleStartupModule(Class<? extends ClasspathScanner> scanner, String... packages) {
        super(scanner, packages);
    }

    @Override
    protected void bindAnnotationListeners() {
        Multibinder<AnnotationListener> listeners = Multibinder.newSetBinder(binder(), AnnotationListener.class);
        listeners.addBinding().to(GuiceModule.GuiceModuleListener.class);
        //listeners.addBinding().to(AutoBind.AutoBindListener.class); //used for Automatic Bean Binding
    }
}

I extended the Examples which can be found on Github Automatic Guice Injection.

Still to go:

  • Maven Release
  • JUnit Tests
  • GIN Release (if possible :)) – Research has to be done.
About these ads

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ photo

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s