My favorites | Sign in
Google
                
Search
for
Updated Nov 16, 2008 by limpbizkit
ExtendingGuice  
Guice's SPI for authors of tools, extensions and plugins

The service provider interface exposes Guice's internal models to aid in the development in tools, extensions, and plugins.

Core Abstractions

InjectionPoint A constructor, field or method that can receive injections. Typically this is a member with the @Inject annotation. For non-private, no argument constructors, the member may omit the annotation. Each injection point has a collection of dependencies.
Key A type, plus an optional binding annotation.
Dependency A key, optionally associated to an injection point. These exist for injectable fields, and for the parameters of injectable methods and constructors. Dependencies know whether they accept null values via an @Nullable annotation.
Element A configuration unit, such as a bind or requestInjection statement. Elements are visitable.
Module A collection of configuration elements. Extracting the elements of a module enables static analysis and code-rewriting. You can inspect, rewrite, and validate these elements, and use them to build new modules.
Injector Manages the application's object graph, as specified by modules. SPI access to the injector works like reflection. It can be used to retrieve the application's bindings and dependency graph.

Examples

Log a warning for each static injection in your Modules:

  public void warnOfStaticInjections(Module... modules) { 
    for (Element element : Elements.getElements(modules)) { 
      element.acceptVisitor(new DefaultElementVisitor<Void>() { 
        @Override 
        public Void visitStaticInjectionRequest(StaticInjectionRequest element) { 
          logger.warning("Static injection is fragile! Please fix " 
              + element.getType().getName() + " at " + element.getSource()); 
          return null; 
        } 
      }); 
    } 
  } 

Sign in to add a comment