/ / ¿puedo crear un proveedor que devuelva un nuevo objeto cada vez que se llama get - java, guice, provider

¿Puedo crear un proveedor que devolverá un nuevo objeto cada vez que se llame a get? java, guice, provider

Quiero tener un miembro proveedor en la clase, que cuando me llamen me dará un nuevo objeto cada vez. ¿Cómo puedo hacer eso?

public class GuiceInjectionTest
{
@Inject
Provider<MyClass> provider;

public Provider<MyClass> get()
{
//I want a new instance every time here that is injected by guice
return provider.get()
}
}

Tenga en cuenta que quiero que esta nueva instancia sea inyectada por Guice, así que no puedo crear un new MyClass() en la implementación del proveedor.

Respuestas

10 por respuesta № 1

Si bien la solución de @GuillaumePolet funcionará, no es la forma preferida de hacerlo. Unión MyClass es correcto, pero no debe inyectar el Injector para esto (debe evitar inyectar el Injector en general).

Para cualquier tipo que pueda inyectar, Guice puede inyectar automáticamente un Provider de ese tipo Entonces, lo que debes hacer es esto:

@Inject
Provider<MyClass> provider;

...
return provider.get();

1 para la respuesta № 2

Puede vincular a su proveedor con el siguiente código:

bind(MyClass.class).toProvider(MyClassProvider.class);

En su proveedor, puede inyectar el inyector y solicitar una nueva instancia MyClass.class

@Inject
Injector injector;

...
return injector.newInstance(MyClass.class);

Pero también puede simplemente vincular su clase con:

bind(MyClass.class);

tener el mismo resultado (no exactamente, dependiendo de cómo use su proveedor)