Search code examples
guiceinitpostconstruct

Guice call init method after instantinating an object


Is it possible to tell Guice to call some method (i.e. init()) after instantinating an object of given type?

I look for functionality similar to @PostConstruct annotation in EJB 3 (and Spring).


Solution

  • Actually, it is possible.

    You need to define a TypeListener to get the functionality going. Something along the lines of the following in your module definition:

    bindListener(Matchers.subclassesOf(MyInitClass.class), new TypeListener() {
        @Override
        public <I> void hear(final TypeLiteral<I> typeLiteral, TypeEncounter<I> typeEncounter) {
            typeEncounter.register(new InjectionListener<I>() {
                @Override
                public void afterInjection(Object i) {
                    MyInitClass m = (MyInitClass) i;
                    m.init();
                }
            });
        }
    });