Version 9

    Labs Injection


    Labs Injection is a Google Guice based dependency injection for Labs. It allows injecting all labs services and number of other things, set by developers.




    You can use Labs Injection in number of environments. Here is a list of HOWTOs of all available solutions.


    • EJB

    For service injection you can use @EJB annotations, but if you want to add Labs injection to resolve other objects you have to add single interceptor in your Stateless bean @Interceptors({LabsInjectionInterceptor.class}).


    So an example header will look like this

    public class FooServiceImpl implements FooService {
         // code


    This is an EJB3 @PostConstruct interceptor that injects all members of a stateless bean.


    • Servlets


    Basically you need to call org.jboss.labs.injection.LabsInjection.getInjector().injectMembers(this); in init() method but you can just extends org.jboss.labs.servlet.LabsHttpServlet which will do this for you transparently.


    • JSF





    inside your <application> tag in WEB-INF/faces-config.xml. This will inject Labs members in all beans.


    • Seam


    Use @Guice annotation from the seam-guice module. To trigger Guice injection on a Seam component, annotate it with @Guice. More information: LabsSeamGuice


    • Any other


    If you need to inject members in some custom environment you can pass an Object you want members to inject to org.jboss.labs.injection.LabsInjection.getInjector().injectMembers(object). Remember that guice injects all the members of members as well.




    • Injecting members


    To inject a member annotate it with That's all.


    private FooService fooService;


    • Adding injecting logic


    To add your service bindings you need to modify org.jboss.labs.LabsGuiceModule. If you want to resolve JNDI components just use org.jboss.labs.injection.JNDIProvider.


    For example if you want to return FooService that can be resolved with "FooServiceImpl/local" jndi string just write

    public class LabsGuiceModule implements Module {
         public void configure(Binder binder) {
              binder.bind(FooService.class).toProvider(new JNDIProvider<FooService>("FooServiceImpl/local"));
              // other bindings


    For more information please check Guice Guide