CDI condicional de habas con Instancia <T>

LppEdd:

Tengo la necesidad de proporcionar a la aplicación correcta de la haba en tiempo de ejecución.

La interfaz común:

public interface MyInterface { ... }

Las implementaciones:

@Named("one")
class MyInterfaceImpl1 implements MyInterface { ... }

@Named("two")
class MyInterfaceImpl2 implements MyInterface { ... }

@Named("three")
class MyInterfaceImpl3 implements MyInterface { ... }

Tenga en cuenta estas clases son paquete-privada.

Entonces escribí un @Producesmétodo:

@Produces
@Singleton
MyInterface getMyInterface(
        final Instance<MyInterface> myInterfaceImplementations,
        final Configuration configuration) {
    // Might be one, two or three.
    final String parameter = configuration.getString("value");
    return myInterfaceImplementations.select(new NamedLiteral(parameter)).get();
}

Es esta la manera correcta de ir, o hay una solución mejor?

Siliarus:

Su solución funcionaría bien, aquí están mis $ 0,02 sólo para asegurarse de que lo encaminó de esa manera:

Lo Nikos Paraskevopoulos significaba en su comentario es que su eficacia están creando cuatro granos para inyectar una. MyInterfaceImpl1, MyInterfaceImpl2, MyInterfaceImpl3Son todos los granos legítimas para cualquier lugar de la inyección en la aplicación. Si estos granos son pesados, la creación puede tomar algún tiempo, también la capacidad de inyectar en cualquier lugar no podría ser previsto? Y luego está el método del productor - el cuarto de frijoles - que supongo que es en última instancia, el único que está después.

En segundo lugar, los tres granos de aplicación tienen un alcance diferente del método de productor. Si son elegibles para la inyección, en su caso, parece lógico que comparten mismo alcance, tal vez?

En tercer lugar, el uso @Singleton. Lo haría también consejo para @ApplicationScoped, no hay ningún daño y ninguna sobrecarga por tener un proxy. Usted no será capaz de notar la diferencia y puede evitar sorpresas desagradables con CDI Singleton (que no se comporta como Singleton EJB).

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=195561&siteId=1
Recomendado
Clasificación