Guice chiama il metodo init dopo aver istanziato un object

È ansible dire a Guice di chiamare un metodo (es. Init ()) dopo aver istanziato un object di un tipo dato?

Cerco funzionalità simili all’annotazione @PostConstruct in EJB 3.

In realtà, è ansible.

È necessario definire un TypeListener per far funzionare la funzionalità. Qualcosa sulla falsariga di quanto segue nella tua definizione del modulo:

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

Puoi semplicemente aggiungere l’annotazione @Inject al tuo metodo init() . Verrà eseguito automaticamente dopo l’istanziazione dell’object.

guiceyfruit fa quello che cerchi per i metodi annotati con @PostConstruct o implementando l’ InitializingBean di spring. È anche ansible scrivere i propri ascoltatori per farlo. Ecco un esempio che chiama un metodo pubblico init() dopo la creazione degli oggetti.

 import com.google.inject.*; import com.google.inject.matcher.*; import com.google.inject.spi.*; public class MyModule extends AbstractModule { static class HasInitMethod extends AbstractMatcher> { public boolean matches(TypeLiteral tpe) { try { return tpe.getRawType().getMethod("init") != null; } catch (Exception e) { return false; } } public static final HasInitMethod INSTANCE = new HasInitMethod(); } static class InitInvoker implements InjectionListener { public void afterInjection(Object injectee) { try { injectee.getClass().getMethod("init").invoke(injectee); } catch (Exception e) { /* do something to handle errors here */ } } public static final InitInvoker INSTANCE = new InitInvoker(); } public void configure() { bindListener(HasInitMethod.INSTANCE, new TypeListener() { public  void hear(TypeLiteral type, TypeEncounter encounter) { encounter.register(InitInvoker.INSTANCE); } }); } } 

GWizard include un modulo ( gwizard-services ) che fornisce i servizi di Guava in un formato adatto a Guice. I servizi di guava ti forniscono la gestione del ciclo di vita in thread paralleli.

https://github.com/stickfigure/gwizard