|
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. |
ExamplesLog 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;
}
});
}
}
|