resueltos programacion poo orientado orientada objetos objeto multiple lista herencia ejercicios ejemplos definir curso como codigo clases guice init postconstruct

guice - programacion - poo python 3



Guice llama al método init después de instanciar un objeto (5)

¿Es posible decirle a Guice que llame a algún método (es decir, init ()) después de crear un objeto de un tipo dado?

Busco una funcionalidad similar a la anotación @PostConstruct en EJB 3.


En realidad, es posible.

TypeListener definir un TypeListener para que la funcionalidad funcione. Algo parecido a lo siguiente en su definición de módulo:

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(); } }); } });


GWizard incluye un módulo ( gwizard-services ) que proporciona servicios de Guava en un formato compatible con Guice. Los servicios de guayaba le permiten administrar el ciclo de vida en subprocesos paralelos.

https://github.com/stickfigure/gwizard



Simplemente puede agregar la anotación @Inject a su método init() . Se ejecutará automáticamente después de que se crea una instancia del objeto.


code.google.com/p/guiceyfruit hace lo que está buscando para los métodos anotados con @PostConstruct o implementando el InitializingBean de Spring. También es posible escribir a tus propios oyentes para hacer esto. Aquí hay un ejemplo que llama a un método público init() después de que se crean los objetos.

import com.google.inject.*; import com.google.inject.matcher.*; import com.google.inject.spi.*; public class MyModule extends AbstractModule { static class HasInitMethod extends AbstractMatcher<TypeLiteral<?>> { 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 <I> void hear(TypeLiteral<I> type, TypeEncounter<I> encounter) { encounter.register(InitInvoker.INSTANCE); } }); } }