seguidores populares para hashtags for expert conseguir buscador java guice

java - para - hashtag populares instagram 2018



Inyección de colección de clases con Guice (2)

Intento inyectar cosas con Google Guice 2.0 y tengo la siguiente estructura:

FooAction implements Action BarAction implements Action

Luego tengo una ActionLibrary con el siguiente constructor:

ActionLibrary (List<Action> theActions)

Cuando solicito una instancia de ActionLibrary de Guice, me gustaría que Guice identifique las dos clases de acción registradas (FooAction, BarAction) y las pase al constructor. La motivación aquí es que cuando agregue una tercera acción BazAction, sería tan simple como registrarla en el Módulo y se agregaría automáticamente a la lista en el constructor.

es posible?


Déjame mostrarte lo que considero una forma aún mejor de hacer multibinding. Si desea que Action s sea conectable y permita que alguien las agregue, a menudo es útil proporcionar un Module simple para que alguien use las pieles que necesitan crear instancias de Multibinder . Aquí hay un ejemplo:

public abstract class ActionModule extends AbstractModule { private Multibinder<Action> actionBinder; @Override protected void configure() { actionBinder = Multibinder.newSetBinder(binder(), Action.class); configureActions(); } /** * Override this method to call {@link #bindAction}. */ protected abstract void configureActions(); protected final LinkedBindingBuilder<Action> bindAction() { return actionBinder.addBinding(); } }

Ahora, ¿por qué es esto mejor? Le permite a alguien usar un ActionModule de ActionModule desde cualquier lugar para agregar más Action a través de la API de enlace estándar. Creo que es más legible Aquí hay un ejemplo de uso:

public final class MyStandardActionModule extends ActionModule() { @Override protected void configureActions() { bindAction().to(FooAction.class); bindAction().to(BarAction.class); // If you need to instantiate an action through a Provider, do this. bindAction().toProvider(BazActionProvider.class); // You can also scope stuff: bindAction().to(MySingletonAction.class).in(Singleton.class); } }

Este patrón de usar un Module para ocultar el multibinder se usa en el código de Guice. Es un poco de trabajo por adelantado, pero mantiene las cosas limpias. También puede hacer algo similar para un MapBinder si lo necesita. Tenga en cuenta que puede crear tantos ActionModule como desee.


Lo que quieres para esto es Multibindings . Específicamente, desea vincular un Set<Action> (no una List , pero un Set es probablemente lo que realmente quiere de todos modos) como este:

Multibinder<Action> actionBinder = Multibinder.newSetBinder(binder(), Action.class); actionBinder.addBinding().to(FooAction.class); actionBinder.addBinding().to(BarAction.class);

Entonces puedes @Inject the Set<Action> cualquier lugar.